You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Eugene Prokopiev <pr...@stc.donpac.ru> on 2006/07/28 13:56:19 UTC

HA network topology

Hi,

I tried to use this network topology with AMQ (I use raw Spring beans 
because I need 2.0 which can't with XBean):

machine m0 (192.168.46.100):

<beans>
         <bean id="broker" 
class="org.apache.activemq.broker.BrokerService" init-method="start" 
destroy-method="stop">
                 <property name="persistent" value="false"/>
                 <property name="transportConnectorURIs">
                         <list>
                                 <value>tcp://localhost:5000</value>
                         </list>
                 </property>
                 <property name="networkConnectorURIs">
                         <list>
 
<value>static:(failover:tcp://m1:5000)</value>
                         </list>
                 </property>
         </bean>
</beans>

machine m1 (192.168.46.101):

<beans>
         <bean id="broker" 
class="org.apache.activemq.broker.BrokerService" init-method="start" 
destroy-method="stop">
                 <property name="persistent" value="false"/>
                 <property name="transportConnectorURIs">
                         <list>
                                 <value>tcp://localhost:5000</value>
                         </list>
                 </property>
                 <property name="networkConnectorURIs">
                         <list>
 
<value>static:(failover:tcp://m0:5000)</value>
                         </list>
                 </property>

         </bean>
</beans>

With this configuration simple producers and consumers using connection 
string "failover:(tcp://m0:5000,tcp://m1:5000)" works fine.

But I need to produce messages just in case of m0 and m1 down. So I 
tried to create more complex producer with embedded broker configured as:

<beans>
	<bean id="broker" class="org.apache.activemq.broker.BrokerService" 
init-method="start" destroy-method="stop">
		<property name="persistent" value="false"/>
		<property name="transportConnectorURIs">
			<list>
				<value>tcp://localhost:5000</value>
			</list>
		</property>
		<property name="networkConnectorURIs">
             <list>
             	<value>static:(failover:(tcp://m0:5000,tcp://m1:5000))</value>
             </list>
         </property>		
	</bean>
</beans>

On starting it I got:

DEBUG - TCP consumer thread starting
DEBUG - Sending: WireFormatInfo { version=1, 
properties={TightEncodingEnabled=true, TcpNoDelayEnabled=true, 
SizePrefixDisabled=false, StackTraceEnabled=true, 
MaxInactivityDuration=30000, CacheEnabled=true}, magic=[A,c,t,i,v,e,M,Q]}
DEBUG - Connection established
DEBUG - Received WireFormat: WireFormatInfo { version=1, 
properties={StackTraceEnabled=true, TightEncodingEnabled=true, 
TcpNoDelayEnabled=true, SizePrefixDisabled=false, 
MaxInactivityDuration=30000, CacheEnabled=true}, magic=[A,c,t,i,v,e,M,Q]}
DEBUG - tcp://m0/192.168.46.100:5000 before negotiation: 
OpenWireFormat{version=1, cacheEnabled=false, stackTraceEnabled=false, 
tightEncodingEnabled=false, sizePrefixDisabled=false}
DEBUG - tcp://m0/192.168.46.100:5000 after negotiation: 
OpenWireFormat{version=1, cacheEnabled=true, stackTraceEnabled=true, 
tightEncodingEnabled=true, sizePrefixDisabled=false}
INFO - Network connection between vm://localhost#0 and tcp://m0:5000 
shutdown: Broker: localhost - Client: NC_localhost_outboundlocalhost 
already connected
javax.jms.InvalidClientIDException: Broker: localhost - Client: 
NC_localhost_outboundlocalhost already connected
         at 
org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:191)
         at 
org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:73)
         at 
org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:69)
         at 
org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:73)
         at 
org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:87)
         at 
org.apache.activemq.broker.AbstractConnection.processAddConnection(AbstractConnection.java:550)
         at 
org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:82)
         at 
org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:118)
         at 
org.apache.activemq.broker.AbstractConnection.service(AbstractConnection.java:226)
         at 
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:62)
         at 
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:91)
         at 
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
         at 
org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:117)
         at 
org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:122)
         at 
org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:87)
         at 
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:127)
         at java.lang.Thread.run(Thread.java:595)
DEBUG -  stopping localhost bridge to localhost is disposed already ? false
INFO - Shutting down VM connectors for broker: localhost
INFO - Shutting down VM connectors for broker: localhost
INFO - Connector vm://localhost Stopped
DEBUG - Stopped.
DEBUG - localhost bridge to localhost stopped
ERROR - Failed to start network bridge: java.io.IOException: Transport 
disposed.
java.io.IOException: Transport disposed.
         at 
org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:69)
         at 
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
         at 
org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:58)
         at 
org.apache.activemq.network.DemandForwardingBridgeSupport.startLocalBridge(DemandForwardingBridgeSupport.java:216)
         at 
org.apache.activemq.network.DemandForwardingBridgeSupport$3.run(DemandForwardingBridgeSupport.java:185)

What's wrong in my configuration?

--
Thanks,
Eugene Prokopiev


Re: HA network topology

Posted by Eugene Prokopiev <pr...@stc.donpac.ru>.
Described configuration will work if I stop m1 broker and configure m0 as:

<beans>
         <bean id="broker" 
class="org.apache.activemq.broker.BrokerService" init-method="start" 
destroy-method="stop">
                 <property name="persistent" value="false"/>
                 <property name="transportConnectorURIs">
                         <list>
                                 <value>tcp://localhost:5000</value>
                         </list>
                 </property>
                 <property name="networkConnectorURIs">
                         <list>
 
<value>static:(failover:(tcp://m1:5000,tcp://192.168.46.2:5000))</value>
                         </list>
                 </property>
         </bean>
</beans>

So, is it impossible to use more than 2 brokers in network?


Re: HA network topology

Posted by Eugene Prokopiev <pr...@stc.donpac.ru>.
> <beans>
>         <bean id="broker" 
> class="org.apache.activemq.broker.BrokerService" init-method="start" 
> destroy-method="stop">
>                 <property name="persistent" value="false"/>
>                 <property name="transportConnectorURIs">
>                         <list>
>                                 <value>tcp://localhost:5000</value>
>                         </list>
>                 </property>
>                 <property name="networkConnectorURIs">
>                         <list>
> 
> <value>static:(failover:tcp://m1:5000)</value>
>                         </list>
>                 </property>
>         </bean>
> </beans>

I tried to modify this configuration as:

<beans>
         <bean id="broker" 
class="org.apache.activemq.broker.BrokerService" init-method="start" 
destroy-method="stop">
                 <property name="persistent" value="false"/>
                 <property name="transportConnectors">
                         <list>
                                 <bean 
class="org.apache.activemq.broker.TransportConnector">
                                         <property name="connectUri" 
value="tcp://localhost:5000"/>
                                         <property name="discoveryUri" 
value="multicast://default"/>
                                 </bean>
                         </list>
                 </property>
                 <property name="networkConnectorURIs">
                         <list>
                                 <value>multicast://default</value>
                         </list>
                 </property>
         </bean>
</beans>

but I got:

org.springframework.beans.TypeMismatchException: Failed to convert 
property value of type [java.lang.String] to required type 
[java.net.URI] for property 'connectUri'; nested exception is 
java.lang.IllegalArgumentException: No matching editors or conversion 
strategy found
Caused by: java.lang.IllegalArgumentException: No matching editors or 
conversion strategy found

Why can it be? URI class has a constructor with one String argument, so 
this must work ...

-- 
Thanks,
Eugene Prokopiev