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