Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如果ActiveMQ服务器关闭,您应该如何处理从应用程序向ActiveMQ发送JMS消息的重试?_Spring_Spring Boot_Jms_Activemq_Spring Jms - Fatal编程技术网

Spring 如果ActiveMQ服务器关闭,您应该如何处理从应用程序向ActiveMQ发送JMS消息的重试?

Spring 如果ActiveMQ服务器关闭,您应该如何处理从应用程序向ActiveMQ发送JMS消息的重试?,spring,spring-boot,jms,activemq,spring-jms,Spring,Spring Boot,Jms,Activemq,Spring Jms,因此,使用JMS和ActiveMQ,我可以确保使用JmsTemplate从Spring引导应用程序发送的消息将到达它的目标应用程序,即使在我将消息发送到ActiveMQ时该目标应用程序已关闭。当目标应用程序启动时,它从队列中获取消息。太好了 不过 如果我的Spring Boot应用程序尝试向ActiveMQ服务器上的队列发送JMS消息,但此时ActiveMQ服务器已关闭,或者网络已关闭,并且我收到连接被拒绝异常,会发生什么情况 建议采用什么方法确保我的应用程序不断尝试将消息重新发送到Active

因此,使用JMS和ActiveMQ,我可以确保使用JmsTemplate从Spring引导应用程序发送的消息将到达它的目标应用程序,即使在我将消息发送到ActiveMQ时该目标应用程序已关闭。当目标应用程序启动时,它从队列中获取消息。太好了

不过

如果我的Spring Boot应用程序尝试向ActiveMQ服务器上的队列发送JMS消息,但此时ActiveMQ服务器已关闭,或者网络已关闭,并且我收到连接被拒绝异常,会发生什么情况


建议采用什么方法确保我的应用程序不断尝试将消息重新发送到ActiveMQ,直到成功?这是我必须自己开发到应用程序中的东西吗?有没有什么漂亮的Spring工具或注释可以帮我做到这一点?关于最佳实践或我应该如何处理这种情况有什么建议吗?

我可以想到的两种方法
1.您可以将另一个ActiveMq设置为回退。在您的代码中,您不必做任何事情,只需从

 activemq.broker.url=tcp://amq01.blah.blah.com:61616

其余的都会自动处理。i、 e.当其中一个关闭时,消息将发送给另一个

  • 另一种方法是在activemq关闭时发送到内部队列(如seda、direct)并从那里读取
    将故障转移添加到url是一种合适的方法


    另一个合理的方法是确保activemq始终在线,因为activemq具有主从模式()以获得高可用性。

    您可以尝试Spring重试。它有很多细粒度控件:


    如果不丢失此消息非常重要,则需要将其保存到其他持久性存储(例如,文件系统、本地mq服务器)中,并附带任何重试代码。但是,对于那些偶尔出现的网络故障或非常临时的mq关闭/重新启动,Spring Retry应该可以做到这一点。

    谢谢。尽管其他答案也很有帮助,但您的答案特别迎合了我的担忧,即我的应用程序服务器由于网络问题而无法连接。不过,只有故障转移ActiveMQ服务器对这种情况没有帮助,您的建议确实给了我一些指导。
    activemq.broker.url=failover:(tcp://amq01.blah.blah.com:61616,tcp://amq02.blah.blah.com:61616)?randomize=false