-
15. Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
ohmygod Dec 12, 2013 9:35 PM (in response to ohmygod)Hi Justin,
I just tried and found it worked for server1 but server2 did not receive the transferred request. There is no any warning or error information in the log.
Here is the configuration for server2 (most are default from standalone.xml):
<hornetq-server> <persistence-enabled>false</persistence-enabled> <security-enabled>false</security-enabled> <journal-type>NIO</journal-type> <journal-file-size>10485760</journal-file-size> <journal-min-files>10</journal-min-files> <journal-sync-transactional>false</journal-sync-transactional> <journal-sync-non-transactional>false</journal-sync-non-transactional> <connectors> <netty-connector name="netty" socket-binding="messaging"/> <netty-connector name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> </netty-connector> <in-vm-connector name="in-vm" server-id="0"/> <connector name="remote-connector"> <factory-class> org.hornetq.core.remoting.impl.netty.NettyConnectorFactory </factory-class> </connector> </connectors> <acceptors> <netty-acceptor name="netty" socket-binding="messaging"/> <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> <param key="direct-deliver" value="false"/> </netty-acceptor> <in-vm-acceptor name="in-vm" server-id="0"/> <acceptor name="remote-connector"> <factory-class> org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory </factory-class> <param key="host" value="localhost"/> <param key="port" value="5446"/> </acceptor> </acceptors> <security-settings> <security-setting match="#"> <permission type="send" roles="guest"/> <permission type="consume" roles="guest"/> <permission type="createNonDurableQueue" roles="guest"/> <permission type="deleteNonDurableQueue" roles="guest"/> </security-setting> </security-settings> <address-settings> <!--default for catch all--> <address-setting match="#"> <dead-letter-address>jms.queue.DLQ</dead-letter-address> <expiry-address>jms.queue.ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <max-size-bytes>104857600</max-size-bytes> <page-size-bytes>10485760</page-size-bytes> <address-full-policy>PAGE</address-full-policy> <message-counter-history-day-limit>10</message-counter-history-day-limit> </address-setting> </address-settings> <jms-connection-factories> <connection-factory name="InVmConnectionFactory"> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/ConnectionFactory"/> </entries> </connection-factory> <connection-factory name="RemoteConnectionFactory"> <connectors> <connector-ref connector-name="netty"/> </connectors> <entries> <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> </entries> </connection-factory> <pooled-connection-factory name="hornetq-ra"> <transaction mode="xa"/> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/JmsXA"/> </entries> <client-failure-check-period>2147483646</client-failure-check-period> <connection-ttl>-1</connection-ttl> <reconnect-attempts>-1</reconnect-attempts> <confirmation-window-size>10485760</confirmation-window-size> <consumer-window-size>10485760</consumer-window-size> <block-on-durable-send>false</block-on-durable-send> <block-on-non-durable-send>false</block-on-non-durable-send> </pooled-connection-factory> </jms-connection-factories> <jms-destinations> <jms-queue name="testQueue"> <entry name="queue/test"/> <entry name="java:jboss/exported/jms/queue/test"/> </jms-queue> <jms-queue name="queue/com.demo.testQueue2"> <entry name="queue/com.demo.testQueue2"/> </jms-queue> </jms-destinations> </hornetq-server>
server2 is using "java:/JmsXA" under the pooled connection factory to lookup jms, which is working normally standalone without bridge settings.
-
16. Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
ohmygod Dec 16, 2013 12:15 AM (in response to ohmygod)Anybody could take a look what is going on here?
I see the log on server1:
2013-12-16 13:11:59,576;[default-threads - 47];INFO ;org.hornetq.ra;HQ151001: awaiting topic/queue creation queue/com.demo.testQueue1
I have configured the divert and bridge to transfer the queue "queue/com.demo.testQueue1" to "queue/com.demo.testQueue2" to server2, but why it is still asking for testQueue1 from server1? Does it confirm the bridge actually does not work at all?
Please help me check what is the problem. Thanks so much.
-
17. Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
jbertram Dec 16, 2013 10:58 AM (in response to ohmygod)The "awaiting topic/queue creation" message is coming from an MDB on server1 that is apparently trying to connect to a destination at "queue/com.demo.testQueue1". It says nothing about whether or not the bridge is working.
At this point I recommend you simplify your setup to just 1 server so you can make sure all the configuration is fine and then move to 2 servers. That will eliminate the possibility of any issue with network/host/port settings.
-
18. Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
ohmygod Dec 16, 2013 11:23 AM (in response to jbertram)Thanks, Justin.
Yes, I have tried some times and confirmed server1 works fine and the divert also works fine, but when I added bridge which is supposed to transfer request to server2 but it does not. Instead, the jms request is still consumed by server1's MDB and server2 does not receive it.
I have logged another thread for this. I have dicussed some stuff with Andy there already. FYI.
-
19. Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
jbertram Dec 16, 2013 11:28 AM (in response to ohmygod)I don't think you are understanding what I'm saying.
I'm suggesting that you remove server2 completely. Have a divert and a bridge that both move messages locally on the same server from one destination to another.
-
20. Re: Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
ohmygod Dec 16, 2013 11:49 AM (in response to jbertram)Sorry, what I did is only confirmed divert works for server1, without bridge set.
Then I just tried to use server1 with both divert and bridge settings (as the connector and acceptor to transfer and receive diverted request) but seems still not working (diverted request not consumed). Here is the configuration.
<hornetq-server> <persistence-enabled>false</persistence-enabled> <security-enabled>false</security-enabled> <journal-type>NIO</journal-type> <journal-sync-transactional>false</journal-sync-transactional> <journal-sync-non-transactional>false</journal-sync-non-transactional> <journal-file-size>10485760</journal-file-size> <journal-min-files>10</journal-min-files> <connectors> <netty-connector name="netty" socket-binding="messaging"/> <netty-connector name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> </netty-connector> <in-vm-connector name="in-vm" server-id="0"/> <connector name="remote-connector"> <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> <param key="host" value="localhost"/> <param key="port" value="5446"/> </connector> </connectors> <acceptors> <netty-acceptor name="netty" socket-binding="messaging"/> <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> <param key="direct-deliver" value="false"/> </netty-acceptor> <in-vm-acceptor name="in-vm" server-id="0"/> <acceptor name="remote-connector"> <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class> <param key="host" value="localhost"/> <param key="port" value="5446"/> </acceptor> </acceptors> <diverts> <divert name="test-divert"> <address>jms.queue.queue/com.demo.testQueue</address> <forwarding-address>jms.queue.queue/com.test</forwarding-address> <exclusive>true</exclusive> </divert> </diverts> <bridges> <bridge name="test-bridge"> <queue-name>jms.queue.queue/com.test</queue-name> <forwarding-address>jms.queue.queue/com.demo.testQueue2</forwarding-address> <retry-interval>1000</retry-interval> <retry-interval-multiplier>1.0</retry-interval-multiplier> <reconnect-attempts>-1</reconnect-attempts> <use-duplicate-detection>true</use-duplicate-detection> <confirmation-window-size>10000000</confirmation-window-size> <static-connectors> <connector-ref> remote-connector </connector-ref> </static-connectors> </bridge> </bridges> <security-settings> <security-setting match="#"> <permission type="send" roles="guest"/> <permission type="consume" roles="guest"/> <permission type="createNonDurableQueue" roles="guest"/> <permission type="deleteNonDurableQueue" roles="guest"/> </security-setting> </security-settings> <address-settings> <address-setting match="#"> <dead-letter-address>jms.queue.DLQ</dead-letter-address> <expiry-address>jms.queue.ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <max-size-bytes>104857600</max-size-bytes> <page-size-bytes>10485760</page-size-bytes> <address-full-policy>PAGE</address-full-policy> <message-counter-history-day-limit>10</message-counter-history-day-limit> </address-setting> </address-settings> <jms-connection-factories> <connection-factory name="InVmConnectionFactory"> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/ConnectionFactory"/> </entries> </connection-factory> <connection-factory name="RemoteConnectionFactory"> <connectors> <connector-ref connector-name="netty"/> </connectors> <entries> <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> </entries> </connection-factory> <pooled-connection-factory name="hornetq-ra"> <transaction mode="xa"/> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/JmsXA"/> </entries> <client-failure-check-period>2147483646</client-failure-check-period> <connection-ttl>-1</connection-ttl> <consumer-window-size>10485760</consumer-window-size> <confirmation-window-size>10485760</confirmation-window-size> <block-on-non-durable-send>false</block-on-non-durable-send> <block-on-durable-send>false</block-on-durable-send> <reconnect-attempts>-1</reconnect-attempts> </pooled-connection-factory> </jms-connection-factories> <jms-destinations> <jms-queue name="queue/com.demo.testQueue"> <entry name="queue/com.demo.testQueue"/> </jms-queue> <jms-queue name="queue/com.demo.testQueue2"> <entry name="queue/com.test2"/> </jms-queue> <jms-queue name="queue/com.test"> <entry name="queue/com.test"/> </jms-queue> </jms-destinations> </hornetq-server>
Here is the MDB config
@MessageDriven(messageListenerInterface = MessageListener.class, activationConfig = { @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/com.test2"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) @TransactionManagement(value = TransactionManagementType.BEAN)
-
21. Re: Re: Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
jbertram Dec 16, 2013 1:06 PM (in response to ohmygod)Make it is as simple as possible. For example, use the "in-vm" connector rather than "remote-connector". I set up a local bridge real quick using this config:
<subsystem xmlns="urn:jboss:domain:messaging:1.3"> <hornetq-server> <security-enabled>false</security-enabled> <persistence-enabled>true</persistence-enabled> <journal-type>NIO</journal-type> <journal-min-files>2</journal-min-files> <connectors> <netty-connector name="netty" socket-binding="messaging"/> <in-vm-connector name="in-vm" server-id="0"/> </connectors> <acceptors> <netty-acceptor name="netty" socket-binding="messaging"/> <in-vm-acceptor name="in-vm" server-id="0"/> </acceptors> <security-settings> <security-setting match="#"> <permission type="send" roles="guest"/> <permission type="consume" roles="guest"/> <permission type="createNonDurableQueue" roles="guest"/> <permission type="deleteNonDurableQueue" roles="guest"/> </security-setting> </security-settings> <address-settings> <!--default for catch all--> <address-setting match="#"> <dead-letter-address>jms.queue.DLQ</dead-letter-address> <expiry-address>jms.queue.ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <redistribution-delay>1000</redistribution-delay> <max-size-bytes>10485760</max-size-bytes> <address-full-policy>BLOCK</address-full-policy> <message-counter-history-day-limit>10</message-counter-history-day-limit> </address-setting> </address-settings> <bridges> <bridge name="test-bridge"> <queue-name>jms.queue.source</queue-name> <forwarding-address>jms.queue.destination</forwarding-address> <retry-interval>1000</retry-interval> <retry-interval-multiplier>1.0</retry-interval-multiplier> <reconnect-attempts>-1</reconnect-attempts> <static-connectors> <connector-ref> in-vm </connector-ref> </static-connectors> </bridge> </bridges> <jms-connection-factories> <connection-factory name="InVmConnectionFactory"> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/ConnectionFactory"/> </entries> </connection-factory> <connection-factory name="RemoteConnectionFactory"> <connectors> <connector-ref connector-name="netty"/> </connectors> <entries> <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> </entries> <ha>true</ha> <block-on-acknowledge>true</block-on-acknowledge> <retry-interval>1000</retry-interval> <retry-interval-multiplier>1.0</retry-interval-multiplier> <reconnect-attempts>-1</reconnect-attempts> </connection-factory> <pooled-connection-factory name="hornetq-ra"> <transaction mode="xa"/> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/JmsXA"/> </entries> </pooled-connection-factory> </jms-connection-factories> <jms-destinations> <jms-queue name="source"> <entry name="jms/queue/source"/> <entry name="java:jboss/exported/jms/queue/source"/> </jms-queue> <jms-queue name="destination"> <entry name="jms/queue/destination"/> <entry name="java:jboss/exported/jms/queue/destination"/> </jms-queue> </jms-destinations> </hornetq-server> </subsystem>
When I send a message to the "source" queue it is moved to the "destination" queue.
Does something like this work for you?
-
22. Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
ohmygod Dec 17, 2013 3:32 AM (in response to jbertram)Thanks Justin. I just used your settings and modified the MDB destination and produer queue name according to your settings, but it does not work in my side. And I added divert setting and also still not working.
I was using entry "java:/JmsXA" under the pooled connection factory as the connection factory name when looking up queue connection in the code. And I also tried each of the entries under the connection factories ("java:/ConnectionFactory", "java:jboss/exported/jms/RemoteConnectionFactory", "java:/JmsXA") and none of them works. What is going on...
I saw the test-bridge "started" status is "true" via jconsole
-
23. Re: Re: Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
ohmygod Dec 17, 2013 5:11 AM (in response to ohmygod)Tried again with a clean server with my project deployed. I used the simplest bridge setting but I found the bridge is not deployed when starting the server.
2013-12-17 18:04:41,021;[MSC service thread 1-7];WARN ;org.hornetq.core.server;HQ222177: No queue found with name jms.queue.source bridge will not be deployed.
Below is the setting:
<hornetq-server> <persistence-enabled>false</persistence-enabled> <security-enabled>false</security-enabled> <journal-type>NIO</journal-type> <journal-file-size>10485760</journal-file-size> <journal-min-files>10</journal-min-files> <journal-sync-transactional>false</journal-sync-transactional> <journal-sync-non-transactional>false</journal-sync-non-transactional> <connectors> <netty-connector name="netty" socket-binding="messaging"/> <netty-connector name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> </netty-connector> <in-vm-connector name="in-vm" server-id="0"/> </connectors> <acceptors> <netty-acceptor name="netty" socket-binding="messaging"/> <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> <param key="direct-deliver" value="false"/> </netty-acceptor> <in-vm-acceptor name="in-vm" server-id="0"/> </acceptors> <security-settings> <security-setting match="#"> <permission type="send" roles="guest"/> <permission type="consume" roles="guest"/> <permission type="createNonDurableQueue" roles="guest"/> <permission type="deleteNonDurableQueue" roles="guest"/> </security-setting> </security-settings> <address-settings> <!--default for catch all--> <address-setting match="#"> <dead-letter-address>jms.queue.DLQ</dead-letter-address> <expiry-address>jms.queue.ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <max-size-bytes>104857600</max-size-bytes> <page-size-bytes>10485760</page-size-bytes> <address-full-policy>PAGE</address-full-policy> <message-counter-history-day-limit>10</message-counter-history-day-limit> </address-setting> </address-settings> <bridges> <bridge name="test-bridge"> <queue-name>jms.queue.source</queue-name> <forwarding-address>jms.queue.destination</forwarding-address> <retry-interval>1000</retry-interval> <retry-interval-multiplier>1.0</retry-interval-multiplier> <reconnect-attempts>-1</reconnect-attempts> <static-connectors> <connector-ref> in-vm </connector-ref> </static-connectors> </bridge> </bridges> <jms-connection-factories> <connection-factory name="InVmConnectionFactory"> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/ConnectionFactory"/> </entries> </connection-factory> <connection-factory name="RemoteConnectionFactory"> <connectors> <connector-ref connector-name="netty"/> </connectors> <entries> <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> </entries> </connection-factory> <pooled-connection-factory name="hornetq-ra"> <transaction mode="xa"/> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/JmsXA"/> </entries> <client-failure-check-period>2147483646</client-failure-check-period> <connection-ttl>-1</connection-ttl> <reconnect-attempts>-1</reconnect-attempts> <confirmation-window-size>10485760</confirmation-window-size> <consumer-window-size>10485760</consumer-window-size> <block-on-durable-send>false</block-on-durable-send> <block-on-non-durable-send>false</block-on-non-durable-send> </pooled-connection-factory> </jms-connection-factories> <jms-destinations> <jms-queue name="testQueue"> <entry name="queue/test"/> <entry name="java:jboss/exported/jms/queue/test"/> </jms-queue> <jms-queue name="source"> <entry name="queue/source"/> </jms-queue> <jms-queue name="destination"> <entry name="queue/destination"/> </jms-queue> </jms-destinations> </hornetq-server>
This time the bridge is shown as "not available" via jconsole.
Confused so much, so far.. Sorry the format is not so good..
-
24. Re: Re: Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
jbertram Dec 17, 2013 10:53 AM (in response to ohmygod)It's not uncommon to see an initial WARN about the bridge not deploying due to the order of deployment. For example, when start the server with the configuration I previously provided I see this:
09:19:27,671 WARN [org.hornetq.core.server] (MSC service thread 1-4) HQ224061: Bridge test-bridge forwarding address jms.queue.destination could not be resolved on address-settings configuration ... 09:19:27,925 INFO [org.hornetq.core.server] (Thread-4 (HornetQ-server-HornetQServerImpl::serverUUID=ed56e49e-666d-11e3-9cf7-0db39fc37659-32855735)) HQ221027: Bridge BridgeImpl@f50548 [name=test-bridge, queue=QueueImpl[name=jms.queue.source, postOffice=PostOfficeImpl [server=HornetQServerImpl::serverUUID=ed56e49e-666d-11e3-9cf7-0db39fc37659]]@18a3d50 targetConnector=ServerLocatorImpl [initialConnectors=[TransportConfiguration(name=in-vm, factory=org-hornetq-core-remoting-impl-invm-InVMConnectorFactory) ?server-id=0], discoveryGroupConfiguration=null]] is connected
As you can see, the bridge deploys successfully despite the initial WARN message. In JConsole I can see that bridge is "started" and when I send a message to the source I can see it move to the destination by inspecting the relevant message counts.
-
25. Re: Re: Re: Re: Re: Re: Re: Re: Re: Is there a way to configure jms request working on another server
jbertram Dec 17, 2013 10:57 AM (in response to ohmygod)BTW - I'm not following you about the connection factory issue. The bridge shouldn't have any impact on any connection factory.
-
26. Re: Is there a way to configure jms request working on another server
ohmygod Dec 17, 2013 1:37 PM (in response to jbertram)So what do you think the problem is? Can you see any cause related? I really can not figure out what is going on. I have modified the queue name in the bridge many times but each time I will get the warn like "No queue is found with name xxxxx, bridge will not be deployed"..
I had made the bridge "started" once, but after I used a clean server it would n.ever start again.. So strange. If you have any idea on what is going on, please tell me asap. Much appreciated.
-
27. Re: Is there a way to configure jms request working on another server
ohmygod Dec 18, 2013 2:20 AM (in response to ohmygod)The bridge is not connected and not "started" via jconsole when I see the warn message "No queue is found with name xxxx....."
Really not able to figure out what the problem might be..
-
28. Re: Is there a way to configure jms request working on another server
jbertram Dec 18, 2013 10:56 AM (in response to ohmygod)1 of 1 people found this helpfulIt looks to me like there something going on here with the timing of when the bridge is deployed and when the core queues are being created. The problem is being made worse because you're not using persistence which forces the server to re-create all the core queues from scratch rather than just loading them from the bindings journal. Try manually creating the core queue, e.g.:
<core-queues>
<queue name="jms.queue.source">
<address>jms.queue.source</address>
</queue>
</core-queues>
Let me know how it goes.
-
29. Re: Is there a way to configure jms request working on another server
ohmygod Dec 18, 2013 10:53 PM (in response to jbertram)Hi Justin, with the core queues setting, it finally works now. Thanks so much for your help.
But I have a couple of questions about the core queues setting.
1. What does this mean? And why did I ever successfully make the bridge work the first time withou this setting? I have never added this setting before.
2. I donot really undersand this comment: "you're not using persistence which forces the server to re-create all the core queues from scratch rather than just loading them from the bindings journal". Does that mean if the persistence is set to false, then the core queues do need to be mannually created by the core queues setting? But I am confused I have never head about this setting (core-queues) or read from hornetq user mannual doc. Does it only affect the bridge function? Because without it my project has been working fine on the jms function.
Appreciated again on your effort on this.