Details
Description
steps to reproduce
1. have a broker running on a port say '12345' and group say 'test' using activemq-core version 5.4.0 or 5.4.1
2. use url
discovery:(multicast://default?group=test)?reconnectDelay=1000&maxReconnectAttempts=30&useExponentialBackOff=false
to connect to the broker
3. the following exception occurs
Caused by: javax.jms.JMSException: Invalid connect parameters:
{reconnectDelay=1000, maxReconnectAttempts=30, useExponentialBackOff=false}at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:62)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1298)
at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1382)
at org.apache.activemq.ActiveMQConnection.createSession(ActiveMQConnection.java:309)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at org.springframework.jms.connection.SingleConnectionFactory$SharedConnectionInvocationHandler.invoke(SingleConnectionFactory.java:550)
at $Proxy34.createSession(Unknown Source)
at org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:196)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:457)
... 38 more
Caused by: java.io.IOException: Invalid connect parameters: {reconnectDelay=1000, maxReconnectAttempts=30, useExponentialBackOff=false}
at org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:45)
at org.apache.activemq.transport.failover.FailoverTransport.oneway(FailoverTransport.java:594)
at org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:85)
at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
at org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:81)
at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:86)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1276)
... 48 more
Caused by: java.lang.IllegalArgumentException: Invalid connect parameters:
at org.apache.activemq.transport.TransportFactory.doCompositeConnect(TransportFactory.java:159)
at org.apache.activemq.transport.TransportFactory.compositeConnect(TransportFactory.java:93)
at org.apache.activemq.transport.failover.FailoverTransport.doReconnect(FailoverTransport.java:844)
at org.apache.activemq.transport.failover.FailoverTransport$2.iterate(FailoverTransport.java:135)
at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
4. downgrading to amq 5.3.2 solves the problem
NOTE: a new functionality has been added to 5.4.0
ref : http://activemq.apache.org/discovery-transport-reference.html
Applying parameters to discovered transports
From 5.4, transport parameters in the URI will also be applied to discovered transports. Therefore, transport parameters may also include parameters for the discovered transport. For example, adding the connectionTimeout parameter to the URI will apply the parameter to every discovered TCP transport, even though this parameter is not a Discovery transport option.
I think the above change has caused the problem