如何检测JMS主题连接的丢失
我们有连接到服务器进程的swing GUI客户端 客户端使用驼峰路由中定义的如何检测JMS主题连接的丢失,jms,activemq,apache-camel,jms-topic,Jms,Activemq,Apache Camel,Jms Topic,我们有连接到服务器进程的swing GUI客户端 客户端使用驼峰路由中定义的jms:queue“from”端点在服务器上“调用”服务,并使用ActiveMQ作为底层jms代理 但是,客户端还为服务器提供了一个Cameljms:topic端点,以便将消息广播回客户端 不幸的是,主题连接似乎以某种方式丢失,尽管客户端仍然可以“调用”服务器上的服务,但服务器无法向客户端的主题端点发送任何消息 驼峰端点的客户端spring定义如下: <camel:route> <
jms:queue
“from”端点在服务器上“调用”服务,并使用ActiveMQ作为底层jms代理
但是,客户端还为服务器提供了一个Cameljms:topic
端点,以便将消息广播回客户端
不幸的是,主题连接似乎以某种方式丢失,尽管客户端仍然可以“调用”服务器上的服务,但服务器无法向客户端的主题端点发送任何消息
驼峰端点的客户端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>
服务器端生产者的定义如下:
<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>
有人知道我们可以通过某种方式在客户端检测到此主题连接的丢失吗?一个简单的解决方法应该是重写
CamelProxyFactoryBean的isSingleton()
方法。返回false,让spring在每次调用时创建生产者bean,而不是缓存它。或者您也可以将CamelProxyFactoryBean
的范围定义为原型
您还可以尝试使用支持连接池的camel组件。我意识到这是一个8个月前的问题,但嘿,到底是什么问题
让服务器每分钟广播一次“isalive”消息是否有意义?如果客户端没有收到任何“isalive”消息,则可以假定它已断开连接。是的,可以这样做。但是,我们设计的系统可以在客户端仍然“登录”时关闭并重新启动服务器,因此当服务器“重新启动”(几分钟)时,客户端会认为它的JMS“管道”一侧已经丢失。自从我提出这个问题以来,原来的问题就没有再出现,所以我相信这是一个暂时性的问题。自从我提出这个问题以来,这个问题就没有再出现,所以我相信这只是一个暂时性的问题,我们已经设法解决了。