如何检测JMS主题连接的丢失

时间:2013-12-15 23:32:15

标签: jms activemq apache-camel jms-topic

我们有连接到服务器进程的swing GUI客户端。

服务器上的客户端“调用”服务使用来自Camel路由中定义的端点的jms:queue',并使用ActiveMQ作为底层JMS代理。

但是,客户端还为服务器提供了Camel jms:topic端点,以便将消息广播回客户端。

不幸的是,看起来主题连接以某种方式丢失,虽然客户端仍然可以“调用”服务器上的服务,但服务器无法向客户端的主题端点发送任何消息。

Camel端点的客户端spring定义如下:

    <camel:route>
        <camel:from uri="jms:topic:inUseQueue"/>
        <camel:to uri="bean:inUseInterfaceImpl"/>
    </camel:route>

服务器端生产者的定义如下:

<bean id="inUseManagerImpl" class="org.apache.camel.spring.remoting.CamelProxyFactoryBean">
  <property name="serviceUrl" value="jms:topic:inUseQueue"/>
  <property name="serviceInterface" value="uniworks.core.inuse.InUseInterface"/>
</bean>

有没有人知道我们能以某种方式检测客户端此主题连接丢失的方法?

2 个答案:

答案 0 :(得分:0)

一个简单的解决方法是覆盖isSingleton()的{​​{1}}方法。返回false并让spring在每次调用时创建生成器bean而不是缓存它。或者您也可以将CamelProxyFactoryBean的范围定义为原型。

您也可以尝试使用支持连接池的ActiveMQ驼峰组件。

答案 1 :(得分:0)

我意识到这是一个8个月大的问题,但是嘿,到底是怎么回事。

让服务器每分钟播放一次“isalive”消息是有意义的,这样如果客户端没有得到任何“isalive”消息,它可以认为它已被断开。