`

activemq中参数maxReconnectAttempts是个大坑

阅读更多

现象:

     8月13日同事在测试session-clean-task工具时,发现工具起动后跑着跑着就不跑了,具体情况为:
     1)分配callid的任务还在跑
     2)从队列中获取callid并处理会话的线程不跑了
处理过程:
     1)因没有异常日志,所以怀疑是redis堵了
          操作:
               在从redis队列OnlineSessions_HandingList中获取数据时,如果callid为null,则打日志
          结果:
               重启工具后未见取出的callid为null的日志
     2)因工具的代码中每一个方法、while循环内部都作了try catch异常捕获,不至于这个都会有问题吧(即使有,至少目前没碰到过)
          另外看了看application.properties的配置,发现redis.timeout=60超时时间太短,于是改成了2000ms
          重启工具后,咦好像正常了,可是跑着跑着又不动了
     3)实在不行,开始加日志
          操作:
               在SessionCleanService类中每一个小的逻辑块加一个info日志: task + "---1"    task + "----2" 这样的
          结果:
               每次线程停住时,都指示问题出现在记录数据库会话日志那块
               

 
               确定是数据库操作卡住了,但是袁园过来说明 log_user_session 表中的数据量非常少
               登陆数据库后发现确实如此
     4)继续查找:
               进入logservice.java文件中查看代码,发现在异常后只记录了数据库日志,没有文本日志打屏
               而log_flow_engine_exception表中也没有日志,认为是logging-job没有部署,导致消息未转储所致
               操作:
                    为了方便查看日志,就在异常时打了一个logger.error
               结果:
                    确实记录数据库日志时存在异常,但是异常内容我再现网也见到过,但是现网是正常的啊:
                    

 
                    但是这个异常日志一旦打出来就应该会返回一个false,然后继续往后走才对啊
     5)接下来,把目光定位到了工具往mq里面写异常日志的代码了:
          
          为了验证mq是否存在问题,先是检查了mq的链接串,发现有一个地址链接不上,但是理论上一个地址链接不上也不应该出问题啊
          即便如此,还是把链接不上的地址给去掉了,再次重启,发现问题依旧
     6)在往mq里面记录日志的前后也加了logger.info日志,发现确实在到了记录日志的代码后,后面的日志就再也没打出来了
     7)查看mq的管理系统,发现累计的日志达到了200多W,然后就想,及时mq满了也不应该导致工具一直等在那吧
          后来上网查看mq链接串中的参数说明,就发现端倪了:
          maxReconnectAttempts为-1时,不限制重试次数,也就是说工具会等在那里知道异常信息塞进去!!!
          后来点击了管理页面上mq队列的purge操作后,工具立即就开始运行了。。。
          这个参数一定要改过来,比如重试三次,否则一旦mq满了或者出现问题,所有业务就中断了,以为所有流程引擎都会往mq写日志
          其他业务组件也是

 

 

          
  • 大小: 3.3 KB
  • 大小: 9.5 KB
  • 大小: 42 KB
分享到:
评论

相关推荐

    ActiveMQ(中文)参考手册

    ActiveMQ(中文)参考手册 ActiveMQ(中文)参考手册 ActiveMQ(中文)参考手册 ActiveMQ(中文)参考手册

    activeMQ收发工具.rar

    本压缩包“activeMQ收发工具.rar”包含了用于测试和操作ActiveMQ的实用工具,主要是一个jar包文件,方便用户在安装了Java Development Kit (JDK) 的环境中运行。 ActiveMQ收发工具的核心功能是通过Java应用程序发送...

    activemq activeMq笔记

    2. **配置数据库**:在 `activemq.xml` 文件中配置数据库相关的参数,例如连接字符串、驱动类等。 ```xml <com.mysql.jdbc.jdbc2.optional.MysqlXADataSource url="jdbc:mysql://localhost:3306/...

    ActiveMQ整合Spirng的一个demo

    在IT领域,集成Apache ActiveMQ与Spring框架是一个常见的任务,特别...这个demo对于理解如何在实际项目中使用ActiveMQ和Spring进行消息通信具有很高的参考价值,同时也为开发者提供了实践和学习这两个关键技术的起点。

    最新稳定版ActiveMQ5.15.0

    Apache ActiveMQ是开源社区中最流行的Java消息代理,也是企业级消息中间件(Message Broker)的首选之一。在最新的稳定版5.15.0中,它提供了可靠的消息传递功能,适用于分布式应用程序之间的通信,实现了异步处理、...

    ActiveMQ中Topic持久化Demo

    在分布式系统中,消息队列(Message Queue)作为解耦组件和异步处理的重要工具,Apache ActiveMQ 是一款广泛使用的开源消息中间件。本篇主要围绕"ActiveMQ中Topic持久化Demo"进行深入探讨,旨在帮助读者理解如何在...

    ActiveMQ中文手册

    ActiveMQ中文手册是一个关于ActiveMQ的详细手册,旨在帮助开发者更好地理解和使用ActiveMQ。下面是从手册中提炼出的相关知识点: 1. JMS基本构件 * 连接工厂:客户用来创建连接的对象,例如ActiveMQ提供的...

    jmx监控activeMQ监控

    在bin/activemq文件中,添加了多个配置项,包括jmxremote.port、rmi.port、password.file和access.file等。这些配置项的作用是: * jmxremote.port:设置jmx监控的端口号,默认为60001。 * rmi.port:设置RMI连接的...

    activemq与tomcat整合

    当与Broker的连接中断时,它会按照配置的参数(如initialReconnectDelay和maxReconnectAttempts)进行重试,确保即使在Broker故障时也能恢复连接。 - NormalConnectionFactory使用了标准的TCP传输,适用于正常情况...

    ActiveMQ高并发处理方案

    通过调整客户端连接URL中的预取策略参数 `jms.prefetchPolicy.all` 可以解决这个问题。例如,将其设置为较小的数值(如2),可以使得消息更加均匀地分配给各个消费者。这样,即使某个消费者处理较慢,也不会阻止其他...

    apache-activemq-5.17.3

    在实际使用中,你可能需要根据你的需求修改`conf/activemq.xml`配置文件,设置如网络连接、安全策略、消息队列和主题等参数。同时,通过`bin`目录下的脚本启动和监控ActiveMQ服务,确保其正常运行。 此外,ActiveMQ...

    apache-activemq-5.16.5

    - `conf`目录:存放配置文件,如`activemq.xml`,这是ActiveMQ的主要配置文件,用于设置各种参数和特性。 - `lib`目录:存放运行所需的库文件和依赖项。 - `data`目录:默认情况下,ActiveMQ会在这里存储持久化的...

    ActiveMq安装.docx

    在这个例子中,我们看到了一个名为bpf.mq的连接配置,其URL包含了连接参数,如主机地址、端口号、连接超时设置等。同时,配置文件还定义了用户名bpf.mq.userName和密码bpf.mq.password,这些参数用于客户端连接到...

    activemqactivemq

    在ActiveMQ中,接收消息通常通过创建一个JMS消费者来实现。消费者可以是Message Listener或Message Selector。Message Listener是一个实现了javax.jms.MessageListener接口的类,它定义了一个onMessage()方法,当...

    ActiveMQ Failover Transport Options

    updateURIsSupported 是一个布尔值,用于控制是否可以动态修改 broker URI,该参数仅在 ActiveMQ 5.4 及更高版本中生效。默认值为 true。 在 ActiveMQ 中,还有一个重要的概念,即消息过滤。消息过滤可以根据不同的...

    activeMQ-API.rar

    在ActiveMQ中,消息模型主要包括两种:点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)。点对点模型中,每个消息只有一个消费者,常用于工作队列;而发布/订阅模型则允许多个消费者订阅同一主题,消息会...

    ActiveMQ客户端

    ActiveMQ客户端库是用于与ActiveMQ服务器交互的接口,允许开发者在他们的应用中发送和接收消息。这个压缩包包含的是Apache ActiveMQ 5.10.0版本,它是一个稳定且广泛使用的版本。 ActiveMQ客户端的核心概念: 1. *...

    JMS教程+activemq以及activemq和tomcat的整合

    在ActiveMQ配置文件中,可以调整持久化存储的相关参数,例如日志类型、存储大小限制等,以确保高效且可靠的持久化。 **整合实例代码** 整合ActiveMQ和Tomcat的具体代码示例通常包括以下部分: - 创建...

    ActiveMQ实战——实现一个简易版的聊天室

    在本篇《ActiveMQ实战——实现一个简易版的聊天室》中,我们将深入探讨如何利用Apache ActiveMQ构建一个简单的在线聊天应用。ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息中间件,用于在...

Global site tag (gtag.js) - Google Analytics