Jms Broker连接 - 在侦听队列之前测试连接 - java

时间:2014-12-09 06:55:26

标签: java jms activemq message-queue messagebroker

我们有一个侦听配置队列的消息侦听器。当消息代理停止或停止时,应用程序突然退出。有没有办法在侦听队列之前检查JMS代理连接。只有在JMS Broker启动时才能启用侦听器代码。当我们收听队列(JMS代理关闭)时,我们得到以下异常

org.springframework.context.ApplicationContextException: Failed to start bean 'xx'; nested exception is org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://xx:61616. Reason: java.net.ConnectException: Connection refused: connect
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176)
    at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:773)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:142)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:485)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:120)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:952)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:941)

2 个答案:

答案 0 :(得分:0)

您无法测试您的连接是否处于活动状态,因为每当您设置与activemq的连接时,只有在您运行activemq服务器时它才会成功。

一个好的选择可以是在Java代码中通过处理“连接异常”并尝试在特定时间间隔之后重新连接直到没有异常发生。这将有助于ActiveMQ在尝试建立连接之前关闭的情况它

希望它有所帮助, 祝你好运!

答案 1 :(得分:0)

使用客户中的failover transportfailover:(tcp://host:port?TCP_OPTIONS)?FAILOVER_OPTIONS

当连接不可用时(通过内部TCP传输),故障转移传输将继续重试,直到它可用,然后建立连接并让客户端正常运行。这看起来像客户端挂起,但它只是等待代理在继续之前变得可用。如果连接因某种原因而中断(例如,重新启动代理),此配置也会尝试重新连接。

大多数人使用故障转移传输允许您连接到一组N中可用的任何代理,但只使用一个内部TCP传输就可以完全正常;只要无法连接到单个TCP传输,它仍会尝试定期重新连接。