相关文章推荐
愉快的眼镜  ·  使用Spring ...·  1 周前    · 
本文主要探讨了在使用Spring Jms连接ActiveMQ时遇到的重连问题。当ActiveMQ未启动时,项目启动会被卡住。通过设置`startupMaxReconnectAttempts`参数限制启动时的重连次数,解决了项目启动问题。然后,针对启动后连接异常的情况,通过设置`reconnectOnException`为true,使得`SingleConnectionFactory`在异常时能重置连接,确保了ActiveMQ启动后能成功连接。同时,调整`recoveryInterval`可以控制连接刷新间隔,减少异常日志的输出。 摘要由CSDN通过智能技术生成

我们现在做的Web项目遇到一个问题,项目启动时使用Failover方式连接某个ActiveMQ,brokerUrl类似

failOver:(tcp://xxx.xxx.xxx.xxx:61616),如果ActiveMQ启动正常,项目启动正常;

但如果ActiveMQ没有启动,项目将无法启动完成,一直卡在连接ActiveMQ阶段。

经过调查,发现是ActiveMQ提供的FailOver Transport方式导致的。

FailOver Transport有maxReconnectAttempts和startupMaxReconnectAttempts两个连接参数。

前者是FailOver Transport最大的重连次数,后者是启动阶段的最大重连次数,由于我们原先的连接这两个参数没有设置值,它们都沿用默认值-1,表示无限次重连,直到连接成功为止。这样,只要我们在启动项目时不启动ActiveMQ,FailOver Transport将一直尝试重连,导致后续程序加载无法进行,从而项目启动卡住。

找到了原因之后,我们在brokerUrl中设置startupMaxReconnectAttempts=2,形如:

failOver:(tcp://xxx.xxx.xxx.xxx:61616)?startupMaxReconnectAttempts=2,这样启动时FailOverTransport仅仅重试2次,如果不成功,就不再尝试,继续加载后续程序,这样就解决了项目启动卡住的问题。

然而还有一个问题没有解决,如果启动时没有连接ActiveMQ成功,在项目启动完成后,再启动ActiveMQ时,即使ActiveMQConnectionFactory一直重连ActiveMQ,直到连接成功。我们配置的DefaultMessageListenerContainer仍然会抛出以下异常:

ERROR DefaultMessageListenerContainer - Could not refresh JMS Connection for destination 'queue://xxxxxxx' - retrying in 5000 ms. Cause: The JMS connection has failed: Co

当mq相关的功能只是项目的一部分独立功能,进行开发的时候可能不总是有mq的环境,这时如果 使用 jms ,控制台就会一直输出mq 连接 失败的信息——如果可以控制mq 连接 的开启和关闭,就不会一直弹出 连接 失败了。这在 spring boot里要怎么做? 想当初研究了一阵 spring jms 的源码,了解 spring 是如何通过一个注解来启动一个consumer,具体过程已经不记得了,指出要点 不 使用 Jms Lis...
使用 的是 spring jms activemq 结合,在配置文件中定义了普通的connectionFactory的bean,如下所示: <bean id="connectionFactory" class="org.apache. activemq . ActiveMQ ConnectionFactory"> <description> JMS 连接 工厂</desc...
Spring Boot中整合 JMS JMS 即( Java Message Service) Java 消息服务,,通过统一的 Java API层面的标准,使得多个客户端可以可以通过 JMS 进行交互。 JMS ActiveMQ 的关系就像JDBC和JDBC驱动的关系。 JMS 包括两种消息模型,点对点和发布/订阅,同时呢 JMS 仅仅支持 Java 平台。 01. ActiveMQ 简介 Apache ActiveMQ 是一个开源的消息中间件,它不仅支持 JMS 1.1规范,而且支持多种编程语言,例如,C、C++、c#、Delphi、Erl
最近遇到一个 问题 ,正常 ActiveMQ 断开后,因为有因为有心跳检测和 重连 机制, 使用 failover方式,消费者其实是会不断的尝试 重连 ,进程应该是一直存在的。但是奇怪的是有的进程的消费者在mq断开后进程会直接挂掉,没有日志输出也不再 重连 了。 主进程如下,消费者代码就是正常的设置监听器( Message Listener )的代码,就不贴了。 * @author ZZJ * @description: * @date 2020-9-9 9:46 public class ActiveMQ T
jms 在分布式应用中 使用 的非常多,在应用中加入一个简单的消息队列,即可达到解藕和高性能。比如是一个系统处理请求并把数据存入数据库,但中间加入消息队列后,发送和消费消息的项目可分开部署多个,加入lvs更可达到高可用,下面看一个我项目中的部署结构:
前言:随着系统的业务功能不断增强,传统的单机、单任务,单线程的运行模式已经逐渐的被淘汰,取而代之的是分布式,多任务,多线程,当然,现在开源的这方面的框架也非常的多,大概的思想也都类似,下面就结合我这一年多的工作 心得 ,分享一个简单易实现的分布式,多任务,多线程的异步任务处理系统的基本实现。 1.系统部署图 该系统主要由3部分构成,任务生产者集群,消息中间件集群,任务消费者集群,下面来分别说下
你是个能吃苦的人吗? 从前的能吃苦大多指的体力劳动的苦,但现在的能吃苦已经包括太多维度,包括:读书学习&寂寞的苦、深度思考&脑力的苦、自律习惯&修行的苦、自控能力&放弃的苦、低头做人&尊严的苦。 虽然这些苦摆在眼前,但大多数人还是喜欢吃简单的苦。熬夜加班、日复一日、重复昨天、CRUD,最后身体发胖、体质下降、能力不足、自抱自泣!所以有些苦能不吃就不吃,要吃就吃那些有成长价值的苦。 今天你坚持了吗? 如果一件小事能坚持5年以上,那你一定是很了不起的人。是
上一篇讲到在整合 activeMQ 如何将queue和topic两种模式共存: spring boot2.0整合 activeMQ ,实现p2p和topic两者消息模式兼容共存 然后还遗留了一个 问题 ,有读者评论因为配置文件里一句启用 连接 池导致项目启动报错,只要把那句配置注释掉或者改为false就可以了,这实际上是治标不治本,因毕竟流量大的时候不启用 连接 池效率会很低: # 启用 连接 spring .activ...
断线 重连 机制是 ActiveMQ 的高可用性具体体现之一。 ActiveMQ 提供failover机制去实现断线 重连 的高可用性,可以使得 连接 断开之后,不断的重试 连接 到一个或多个brokerURL。 默认情况下,如果client与broker直接的connection断开,则client会新起一个线程,不断的从url参数中获取一个url来重试 连接 。 但有时在做开发时可能不需要 连接 服务器,这时程序在后台出现了...
demo2 留下了两个 问题 :       1.我们利用demo2 的配置,在queue 模式下 连续发送10W消息出现出现状况。       2.topic 模式下,消费者重启时间段收不到监听的信息怎么办? 二、 问题 解析:         1.测试 发送10W消息,中途会出现          socket: tcp://localhost:61616... Q: broker:localhost  clientid  already connect from tcp xxxxxxx ------------------------------------------------------------------------------- A : 客户端ID 已存在 (1注册的clientID 重复  检查有两个客户端的ID 是否有相同的  ...