我在tomcat上运行了一个带有声明的activemq使用者的Web应用程序。应用程序工作正常,但现在我想在运行时启动使用者 - 所以我声明了控制总线并向此发送消息。
我的代码中有一段:
<channel id="controlChannel"/>
<control-bus input-channel="controlChannel"/>
<gateway service-interface="myApp.ControlGateway" default-request-channel="controlChannel"/>
<channel id="eventQueueChannel"/>
<jms:message-driven-channel-adapter
id="eventQueueJMSIn"
connection-factory="connectionFactory"
destination="eventQueue"
channel="eventQueueChannel"
auto-startup="false"
acknowledge="transacted"
concurrent-consumers="${concurrentConsumers:1}"
max-concurrent-consumers="${maxConcurrentConsumers:10}"/>
然后我按controlBusGateway.sendCommand("@eventQueueJMSIn.start()");
启动此网关。
问题是消费者无法连接到activemq。此外,出版商也存在问题。
总之,当一切都自动开始时,没有问题。当我将消费者网关更改为auto-startup="false"
时,我无法发送或接收来自activemq的任何消息。但是当我测试这个bug时,我假设如果在activemq中排队了消息,它会连接到它并且一切正常。
我非常惊讶,发布商存在问题 - 我没有改变它。我不知道为什么它有时会起作用......
编辑:
有一个错误:
“org.apache.activemq.transport.tcp.TcpTransportFactory
无法转换为org.apache.activemq.transport.TransportFactory
” - 将auto-startup
更改为false后会显示。
我还看到Thread.currentThread().getContextClassLoader()
在一切正常时返回BundleDelegatingClassLoader
,在抛出异常时返回AppClassLoader
。
答案 0 :(得分:0)
如果它不是开销,那么您可以尝试使用Camel Framework来实现所描述的场景。