You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Geoffrey Arnold <ge...@gmail.com> on 2012/05/20 22:45:03 UTC

Problem with network-of-brokers configuration after upgrading to AMQ 5.6.0

Hello again,

We are from AMQ 5.4.0 to 5.6.0, and there appears to be a new uniqueness constraint in network connector names in network-of-brokers configurations.

Here's our setup:
- N copies of a producer application; each copy of the producer application consists of an embedded broker with 2 network connectors pointing at an embedded broker in the consumer application
- 1 consumer application; the consumer application consists of an embedded broker with 2 transport connectors

Messages in the consumer application are sent to the embedded broker, which pushes those messages to the embedded broker in the consumer application over the network/transport connectors, and are consumed by listeners on the embedded broker in the consumer application.

In AMQ 5.4.0, the name of the network connectors in the embedded broker in the producer application were not required to be unique across copies of the application, ie. for each copy of the producer application used the same name for each network connector.  In AMQ 5.6.0, we receive the following error when starting a second copy of the producer application:


	In the producer application:

	Network connection between vm://producerBroker#4 and tcp://localhost/127.0.0.1:61616 shutdown due to a remote error: javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62961


	In the consumer application:

	Async error occurred: javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62963
javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62963
		at org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:223)
		at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
		at org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:65)
		at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
		at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
		at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
		at org.apache.activemq.security.SimpleAuthenticationBroker.addConnection(SimpleAuthenticationBroker.java:97)
		at org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:91)
		at org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:715)
		at org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:79)
		at org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)
		at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292)
		at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:150)
		at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
		at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
		at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:229)
		at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
		at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:222)
		at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:204)
		at java.lang.Thread.run(Thread.java:680)


Is this a regression or a new requirement.  If it's a new requirement, what strategy would you recommend to ensure uniqueness in network connector names?

Thanks in advance,
Geoff.

RE: Problem with network-of-brokers configuration after upgrading to AMQ 5.6.0

Posted by Stephen Vincent <St...@sas.com>.
Just a follow-up post to that network-of-brokers thread.

Let me know if you already subscribe to the Activemq "users" forum.  If so, I will stop sending you copies of things that may be interesting.

Cheers,
sv

sasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasas
Stephen Vincent
Platform R&D
Tel: + 1 919 531 7556
stephen.vincent@sas.com
SAS ... THE POWER TO KNOW

-----Original Message-----
From: Geoffrey Arnold [mailto:geoffrey.arnold@gmail.com] 
Sent: Monday, May 21, 2012 3:58 PM
To: users@activemq.apache.org
Subject: Re: Problem with network-of-brokers configuration after upgrading to AMQ 5.6.0

Hey Gary, 

This all sounds very reasonable to me, but to confirm the issue you referenced was for connectors with duplex enabled, but our connectors do not have duplex enabled (unless it's enabled by default).  My guess is that network connector names have to be unique, regardless of whether duplex is enabled or disabled, but I wanted to check with you to be sure.

Geoff.

On May 21, 2012, at 6:06 AM, Gary Tully wrote:

> It is a requirement, because on reconnect due to a network partition
> of two non unique network connectors, if the target broker has not
> noticed the disconnect, it was possible to get duplicate network
> connectors created and potential for deadlock. Having them explicitly
> named allows reliable duplicate detection. This was introduced in:
> https://issues.apache.org/jira/browse/AMQ-3176
> 
> To have them unique, if possible give the network connector a name
> that reflects its usage, like wise for the broker.
> 
> In your case, where there are multiple instances of the same/identical
> application deployed, you may want to use a system property that can
> be unique per app jvm and reference that in the xml configuration via
> org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
> 
> If is important that the clientId, the combination of brokerName and
> networkConnector name,  is consistent across restarts.
> 
> On 20 May 2012 21:45, Geoffrey Arnold <ge...@gmail.com> wrote:
>> Hello again,
>> 
>> We are from AMQ 5.4.0 to 5.6.0, and there appears to be a new uniqueness constraint in network connector names in network-of-brokers configurations.
>> 
>> Here's our setup:
>> - N copies of a producer application; each copy of the producer application consists of an embedded broker with 2 network connectors pointing at an embedded broker in the consumer application
>> - 1 consumer application; the consumer application consists of an embedded broker with 2 transport connectors
>> 
>> Messages in the consumer application are sent to the embedded broker, which pushes those messages to the embedded broker in the consumer application over the network/transport connectors, and are consumed by listeners on the embedded broker in the consumer application.
>> 
>> In AMQ 5.4.0, the name of the network connectors in the embedded broker in the producer application were not required to be unique across copies of the application, ie. for each copy of the producer application used the same name for each network connector.  In AMQ 5.6.0, we receive the following error when starting a second copy of the producer application:
>> 
>> 
>>        In the producer application:
>> 
>>        Network connection between vm://producerBroker#4 and tcp://localhost/127.0.0.1:61616 shutdown due to a remote error: javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62961
>> 
>> 
>>        In the consumer application:
>> 
>>        Async error occurred: javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62963
>> javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62963
>>                at org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:223)
>>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>>                at org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:65)
>>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>>                at org.apache.activemq.security.SimpleAuthenticationBroker.addConnection(SimpleAuthenticationBroker.java:97)
>>                at org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:91)
>>                at org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:715)
>>                at org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:79)
>>                at org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)
>>                at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292)
>>                at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:150)
>>                at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
>>                at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
>>                at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:229)
>>                at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
>>                at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:222)
>>                at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:204)
>>                at java.lang.Thread.run(Thread.java:680)
>> 
>> 
>> Is this a regression or a new requirement.  If it's a new requirement, what strategy would you recommend to ensure uniqueness in network connector names?
>> 
>> Thanks in advance,
>> Geoff.
> 
> 
> 
> -- 
> http://fusesource.com
> http://blog.garytully.com




Re: Problem with network-of-brokers configuration after upgrading to AMQ 5.6.0

Posted by Geoffrey Arnold <ge...@gmail.com>.
Hey Gary, 

This all sounds very reasonable to me, but to confirm the issue you referenced was for connectors with duplex enabled, but our connectors do not have duplex enabled (unless it's enabled by default).  My guess is that network connector names have to be unique, regardless of whether duplex is enabled or disabled, but I wanted to check with you to be sure.

Geoff.

On May 21, 2012, at 6:06 AM, Gary Tully wrote:

> It is a requirement, because on reconnect due to a network partition
> of two non unique network connectors, if the target broker has not
> noticed the disconnect, it was possible to get duplicate network
> connectors created and potential for deadlock. Having them explicitly
> named allows reliable duplicate detection. This was introduced in:
> https://issues.apache.org/jira/browse/AMQ-3176
> 
> To have them unique, if possible give the network connector a name
> that reflects its usage, like wise for the broker.
> 
> In your case, where there are multiple instances of the same/identical
> application deployed, you may want to use a system property that can
> be unique per app jvm and reference that in the xml configuration via
> org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
> 
> If is important that the clientId, the combination of brokerName and
> networkConnector name,  is consistent across restarts.
> 
> On 20 May 2012 21:45, Geoffrey Arnold <ge...@gmail.com> wrote:
>> Hello again,
>> 
>> We are from AMQ 5.4.0 to 5.6.0, and there appears to be a new uniqueness constraint in network connector names in network-of-brokers configurations.
>> 
>> Here's our setup:
>> - N copies of a producer application; each copy of the producer application consists of an embedded broker with 2 network connectors pointing at an embedded broker in the consumer application
>> - 1 consumer application; the consumer application consists of an embedded broker with 2 transport connectors
>> 
>> Messages in the consumer application are sent to the embedded broker, which pushes those messages to the embedded broker in the consumer application over the network/transport connectors, and are consumed by listeners on the embedded broker in the consumer application.
>> 
>> In AMQ 5.4.0, the name of the network connectors in the embedded broker in the producer application were not required to be unique across copies of the application, ie. for each copy of the producer application used the same name for each network connector.  In AMQ 5.6.0, we receive the following error when starting a second copy of the producer application:
>> 
>> 
>>        In the producer application:
>> 
>>        Network connection between vm://producerBroker#4 and tcp://localhost/127.0.0.1:61616 shutdown due to a remote error: javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62961
>> 
>> 
>>        In the consumer application:
>> 
>>        Async error occurred: javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62963
>> javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62963
>>                at org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:223)
>>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>>                at org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:65)
>>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>>                at org.apache.activemq.security.SimpleAuthenticationBroker.addConnection(SimpleAuthenticationBroker.java:97)
>>                at org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:91)
>>                at org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:715)
>>                at org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:79)
>>                at org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)
>>                at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292)
>>                at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:150)
>>                at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
>>                at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
>>                at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:229)
>>                at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
>>                at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:222)
>>                at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:204)
>>                at java.lang.Thread.run(Thread.java:680)
>> 
>> 
>> Is this a regression or a new requirement.  If it's a new requirement, what strategy would you recommend to ensure uniqueness in network connector names?
>> 
>> Thanks in advance,
>> Geoff.
> 
> 
> 
> -- 
> http://fusesource.com
> http://blog.garytully.com


Re: Problem with network-of-brokers configuration after upgrading to AMQ 5.6.0

Posted by Gary Tully <ga...@gmail.com>.
It is a requirement, because on reconnect due to a network partition
of two non unique network connectors, if the target broker has not
noticed the disconnect, it was possible to get duplicate network
connectors created and potential for deadlock. Having them explicitly
named allows reliable duplicate detection. This was introduced in:
https://issues.apache.org/jira/browse/AMQ-3176

To have them unique, if possible give the network connector a name
that reflects its usage, like wise for the broker.

In your case, where there are multiple instances of the same/identical
application deployed, you may want to use a system property that can
be unique per app jvm and reference that in the xml configuration via
org.springframework.beans.factory.config.PropertyPlaceholderConfigurer

If is important that the clientId, the combination of brokerName and
networkConnector name,  is consistent across restarts.

On 20 May 2012 21:45, Geoffrey Arnold <ge...@gmail.com> wrote:
> Hello again,
>
> We are from AMQ 5.4.0 to 5.6.0, and there appears to be a new uniqueness constraint in network connector names in network-of-brokers configurations.
>
> Here's our setup:
> - N copies of a producer application; each copy of the producer application consists of an embedded broker with 2 network connectors pointing at an embedded broker in the consumer application
> - 1 consumer application; the consumer application consists of an embedded broker with 2 transport connectors
>
> Messages in the consumer application are sent to the embedded broker, which pushes those messages to the embedded broker in the consumer application over the network/transport connectors, and are consumed by listeners on the embedded broker in the consumer application.
>
> In AMQ 5.4.0, the name of the network connectors in the embedded broker in the producer application were not required to be unique across copies of the application, ie. for each copy of the producer application used the same name for each network connector.  In AMQ 5.6.0, we receive the following error when starting a second copy of the producer application:
>
>
>        In the producer application:
>
>        Network connection between vm://producerBroker#4 and tcp://localhost/127.0.0.1:61616 shutdown due to a remote error: javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62961
>
>
>        In the consumer application:
>
>        Async error occurred: javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62963
> javax.jms.InvalidClientIDException: Broker: consumerBroker - Client: networkConnector1_producerBroker_outbound already connected from tcp://127.0.0.1:62963
>                at org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:223)
>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>                at org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:65)
>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>                at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:85)
>                at org.apache.activemq.security.SimpleAuthenticationBroker.addConnection(SimpleAuthenticationBroker.java:97)
>                at org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:91)
>                at org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:715)
>                at org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:79)
>                at org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)
>                at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292)
>                at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:150)
>                at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
>                at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
>                at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:229)
>                at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
>                at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:222)
>                at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:204)
>                at java.lang.Thread.run(Thread.java:680)
>
>
> Is this a regression or a new requirement.  If it's a new requirement, what strategy would you recommend to ensure uniqueness in network connector names?
>
> Thanks in advance,
> Geoff.



-- 
http://fusesource.com
http://blog.garytully.com