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

Jms代理连接-在侦听队列之前测试连接-java,java,jms,activemq,message-queue,messagebroker,Java,Jms,Activemq,Message Queue,Messagebroker,我们有一个侦听配置的队列的消息侦听器。当消息代理停止或关闭时,应用程序会突然退出。在侦听队列之前,是否有方法检查JMS代理连接。仅当JMS代理启动时,才必须启用侦听器代码。当我们在JMS代理关闭的情况下侦听队列时,会出现以下异常 org.springframework.context.ApplicationContextException: Failed to start bean 'xx'; nested exception is org.springframework.jms.Uncateg

我们有一个侦听配置的队列的消息侦听器。当消息代理停止或关闭时,应用程序会突然退出。在侦听队列之前,是否有方法检查JMS代理连接。仅当JMS代理启动时,才必须启用侦听器代码。当我们在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)

您无法测试连接是否处于活动状态,因为无论何时使用activemq建立连接,只有在运行activemq服务器时,连接才会成功

一个好的选择是在Java代码中处理“连接异常”,并在特定的时间间隔后尝试重新连接,直到没有异常发生。这将有助于在您尝试和设置与ActiveMQ的连接之前关闭ActiveMQ的场景

希望有帮助, 祝你好运

在客户端中使用:故障切换:tcp://host:port?TCP_OPTIONS?FAILOVER_OPTIONS

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


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

否。侦听队列会测试连接。在听之前再次测试它是徒劳的。