【问题标题】:Jms Broker connection - Test the connection before listening to the queue - javaJms Broker 连接 - 在监听队列之前测试连接 - java
【发布时间】:2015-02-06 23:59:06
【问题描述】:

我们有一个消息监听器来监听配置的队列。当消息代理停止或关闭时,应用程序会突然退出。有没有办法在收听队列之前检查 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)

【问题讨论】:

  • 没有。侦听队列测试连接。在聆听之前再次测试它是徒劳的。

标签: java jms activemq message-queue messagebroker


【解决方案1】:

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

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

希望对你有帮助, 祝你好运!

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 2019-05-01
      • 2017-02-14
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      相关资源
      最近更新 更多