You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Marc Dumontier <ma...@mdumontier.com> on 2006/10/26 15:38:03 UTC
ForwardingBridge - how do i do it?
Hi,
I had asked this question a while back but never got any responses...I
still really need to figure out how to do this in order to use the
product. Hopefully someone can send me in the right direction
currently, when using spring based config, i can create a network
connector like
<networkConnectors>
<networkConnector uri="static:(tcp://localhost:61616)"
failover="true"/>
</networkConnectors>
From the documentation, I gather this creates a DemandForwardingBridge
- meaning that messages are stored on the local broker until a consumer
(connected to the remote broker) polls for it or something
(store-and-forward?). That's my understanding anyway.
What I need is the ForwardingBridge where messages will be forwarded
immediately from the local broker to the remote broker regardless of
anything else. If the remote broker isn't available, then the local
broker would hang on to the message until the remote broker is available
once again. when the connection is re-established, all messages queued
up on the local broker is forwarded immediately.
Can anyone help me configure this behavior? Can I do it using spring
config..or do i have to create and link the objects in code? btw:I'm
using 4.0
Thanks,
Marc Dumontier
Re: ForwardingBridge - how do i do it?
Posted by Marc Dumontier <ma...@mdumontier.com>.
I managed to fix most of the problems with setting dispatchAsync to
true, and adding failover://(...) to the uri.
now i'm getting these everytime i startup up the client
local broker
----------------
java.lang.NullPointerException
at
org.apache.activemq.network.ForwardingBridge.serviceLocalCommand(ForwardingBridge.java:215)
at
org.apache.activemq.network.ForwardingBridge$1.onCommand(ForwardingBridge.java:89)
at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:97)
at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
at
org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:76)
at
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
at
org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
at
org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:211)
at
org.apache.activemq.broker.AbstractConnection.processDispatch(AbstractConnection.java:581)
at
org.apache.activemq.broker.AbstractConnection.iterate(AbstractConnection.java:597)
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:110)
at
org.apache.activemq.thread.PooledTaskRunner.access$100(PooledTaskRunner.java:25)
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:534)
Remote Broker
---------------------
INFO Service - Async error occurred:
javax.jms.InvalidClientIDException: Broker: localhost - Client:
local-remote-bridge already connected
javax.jms.InvalidClientIDException: Broker: localhost - Client:
local-remote-bridge already connected
at
org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:176)
at
org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:69)
at
org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:69)
at
org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:69)
at
org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:82)
at
org.apache.activemq.broker.AbstractConnection.processAddConnection(AbstractConnection.java:507)
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:201)
at
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:62)
at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:97)
at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
at
org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:114)
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:143)
at java.lang.Thread.run(Thread.java:595)
Marc Dumontier wrote:
> Hi,
>
> From what i can tell this is what is happening
>
> CASE 1
> ------------
> 1.start remote broker
> 2.start up client with embedded broker (local broker)
> 3.start sending messages
>
> Up to here, all is working well...messages are immediately forwarded
> to remote broker
>
> 4. kill remote broker
>
> Messages are queuing up in local broker as expected
>
> 5. start up remote broker
>
> Messages continue to queue up in local broker...no reconnection occurs
>
>
>
> CASE 2
> ------------
> 1. start up remote broker
> 2. start up client (currently has queued messages in local broker)
>
> messages are sent to remote broker, *but* queued messages in local
> broker don't get forwarded
>
>
>
> Case 3
> -----------
> 1. start up client
>
> ConnectionRefused exception occurs. What I'd like to see is for the
> client to keep trying to connect to the remote broker with no
> exception thrown. what is the best pattern (or URI parameter?) to
> achieve this.
>
>
> Thanks Again,
> Marc
>
>
>
>
>
>
>
> Marc Dumontier wrote:
>
>> From the ForwardingBridgeTest, I kind of put this together
>> quickly...seems to work so far..need to do testing though
>> let me know if this is the right path
>>
>> BrokerService brokerBean = (BrokerService)ctx.getBean("broker");
>> try { URI localUri = new
>> URI("vm://localhost");
>> Transport localTransport =
>> TransportFactory.connect(localUri);
>> URI remoteUri = new URI("tcp://localhost:61616");
>> Transport remoteTransport =
>> TransportFactory.connect(remoteUri);
>> ForwardingBridge bridge = new
>> ForwardingBridge(localTransport,remoteTransport);
>> bridge.setClientId("local-remote-bridge");
>> bridge.setDispatchAsync(false);
>> bridge.start();
>>
>> Thread.sleep(1000);
>> }catch(Exception e) {
>> log.error(e);
>> }
>>
>>
>>
>> Marc Dumontier wrote:
>>
>>> Hi,
>>>
>>> I had asked this question a while back but never got any
>>> responses...I still really need to figure out how to do this in
>>> order to use the product. Hopefully someone can send me in the right
>>> direction
>>>
>>> currently, when using spring based config, i can create a network
>>> connector like
>>>
>>> <networkConnectors>
>>> <networkConnector uri="static:(tcp://localhost:61616)"
>>> failover="true"/>
>>> </networkConnectors>
>>>
>>>
>>> From the documentation, I gather this creates a
>>> DemandForwardingBridge - meaning that messages are stored on the
>>> local broker until a consumer (connected to the remote broker) polls
>>> for it or something (store-and-forward?). That's my understanding
>>> anyway.
>>>
>>> What I need is the ForwardingBridge where messages will be forwarded
>>> immediately from the local broker to the remote broker regardless of
>>> anything else. If the remote broker isn't available, then the local
>>> broker would hang on to the message until the remote broker is
>>> available once again. when the connection is re-established, all
>>> messages queued up on the local broker is forwarded immediately.
>>>
>>> Can anyone help me configure this behavior? Can I do it using spring
>>> config..or do i have to create and link the objects in code? btw:I'm
>>> using 4.0
>>>
>>> Thanks,
>>>
>>> Marc Dumontier
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
Re: ForwardingBridge - how do i do it?
Posted by Marc Dumontier <ma...@mdumontier.com>.
Hi,
From what i can tell this is what is happening
CASE 1
------------
1.start remote broker
2.start up client with embedded broker (local broker)
3.start sending messages
Up to here, all is working well...messages are immediately forwarded to
remote broker
4. kill remote broker
Messages are queuing up in local broker as expected
5. start up remote broker
Messages continue to queue up in local broker...no reconnection occurs
CASE 2
------------
1. start up remote broker
2. start up client (currently has queued messages in local broker)
messages are sent to remote broker, *but* queued messages in local
broker don't get forwarded
Case 3
-----------
1. start up client
ConnectionRefused exception occurs. What I'd like to see is for the
client to keep trying to connect to the remote broker with no exception
thrown. what is the best pattern (or URI parameter?) to achieve this.
Thanks Again,
Marc
Marc Dumontier wrote:
> From the ForwardingBridgeTest, I kind of put this together
> quickly...seems to work so far..need to do testing though
> let me know if this is the right path
>
> BrokerService brokerBean = (BrokerService)ctx.getBean("broker");
> try { URI localUri = new
> URI("vm://localhost");
> Transport localTransport = TransportFactory.connect(localUri);
> URI remoteUri = new URI("tcp://localhost:61616");
> Transport remoteTransport =
> TransportFactory.connect(remoteUri);
> ForwardingBridge bridge = new
> ForwardingBridge(localTransport,remoteTransport);
> bridge.setClientId("local-remote-bridge");
> bridge.setDispatchAsync(false);
> bridge.start();
>
> Thread.sleep(1000);
>
> }catch(Exception e) {
> log.error(e);
> }
>
>
>
> Marc Dumontier wrote:
>
>> Hi,
>>
>> I had asked this question a while back but never got any
>> responses...I still really need to figure out how to do this in order
>> to use the product. Hopefully someone can send me in the right direction
>>
>> currently, when using spring based config, i can create a network
>> connector like
>>
>> <networkConnectors>
>> <networkConnector uri="static:(tcp://localhost:61616)"
>> failover="true"/>
>> </networkConnectors>
>>
>>
>> From the documentation, I gather this creates a
>> DemandForwardingBridge - meaning that messages are stored on the
>> local broker until a consumer (connected to the remote broker) polls
>> for it or something (store-and-forward?). That's my understanding
>> anyway.
>>
>> What I need is the ForwardingBridge where messages will be forwarded
>> immediately from the local broker to the remote broker regardless of
>> anything else. If the remote broker isn't available, then the local
>> broker would hang on to the message until the remote broker is
>> available once again. when the connection is re-established, all
>> messages queued up on the local broker is forwarded immediately.
>>
>> Can anyone help me configure this behavior? Can I do it using spring
>> config..or do i have to create and link the objects in code? btw:I'm
>> using 4.0
>>
>> Thanks,
>>
>> Marc Dumontier
>>
>>
>>
>>
>>
>>
>>
>
Re: ForwardingBridge - how do i do it?
Posted by Marc Dumontier <ma...@mdumontier.com>.
From the ForwardingBridgeTest, I kind of put this together
quickly...seems to work so far..need to do testing though
let me know if this is the right path
BrokerService brokerBean = (BrokerService)ctx.getBean("broker");
try {
URI localUri = new URI("vm://localhost");
Transport localTransport = TransportFactory.connect(localUri);
URI remoteUri = new URI("tcp://localhost:61616");
Transport remoteTransport = TransportFactory.connect(remoteUri);
ForwardingBridge bridge = new
ForwardingBridge(localTransport,remoteTransport);
bridge.setClientId("local-remote-bridge");
bridge.setDispatchAsync(false);
bridge.start();
Thread.sleep(1000);
}catch(Exception e) {
log.error(e);
}
Marc Dumontier wrote:
> Hi,
>
> I had asked this question a while back but never got any responses...I
> still really need to figure out how to do this in order to use the
> product. Hopefully someone can send me in the right direction
>
> currently, when using spring based config, i can create a network
> connector like
>
> <networkConnectors>
> <networkConnector uri="static:(tcp://localhost:61616)"
> failover="true"/>
> </networkConnectors>
>
>
> From the documentation, I gather this creates a DemandForwardingBridge
> - meaning that messages are stored on the local broker until a
> consumer (connected to the remote broker) polls for it or something
> (store-and-forward?). That's my understanding anyway.
>
> What I need is the ForwardingBridge where messages will be forwarded
> immediately from the local broker to the remote broker regardless of
> anything else. If the remote broker isn't available, then the local
> broker would hang on to the message until the remote broker is
> available once again. when the connection is re-established, all
> messages queued up on the local broker is forwarded immediately.
>
> Can anyone help me configure this behavior? Can I do it using spring
> config..or do i have to create and link the objects in code? btw:I'm
> using 4.0
>
> Thanks,
>
> Marc Dumontier
>
>
>
>
>
>
>