【日志】警告信息如下:
//////////begin//////
2014-01-15 16:39:46,030 | WARN | Transport Connection to: tcp://10.88.112.165:58072 failed: com.cnd.emq.transport.InactivityIOException: Cha
nnel was inactive for too (>30000) long: tcp://10.88.112.165:58072
2014-01-15 16:39:46,030 | INFO | =catch IOException and stop transport connection =begin=
2014-01-15 16:39:46,030 | WARN | Transport Connection to: tcp://10.88.112.165:58063 failed: com.cnd.emq.transport.InactivityIOException: Cha
nnel was inactive for too (>30000) long: tcp://10.88.112.165:58063
****************************
//////////end/////////
【分析】:
com\cnd\emq\transport\AbstractInactivityMonitor.java==>
Channecl was inactive for too(>30000) long
onException(new InactivityIOException("Channel was inactive for too (>" + readCheckTime + ") long: " + next.getRemoteAddress()));
//////////end////////
此参数由: readCheckTime ,通过:com.cnd.emq.transport.InactivityMonitor.configuredOk进行设置==>可以通过开debug模式,监测readCheckTime值的大小。
分析如下:
///////begin/////////
2014-01-16 16:16:17,017 | DEBUG | Using min of local: WireFormatInfo { version=10, properties={MaxFrameSize=9223372036854775807, CacheSize=1
024, CacheEnabled=true, SizePrefixDisabled=false, MaxInactivityDurationInitalDelay=10000, TcpNoDelayEnabled=true, MaxInactivityDuration=6000
0, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[e,M,Q]} and remote: WireFormatInfo { version=10, properties={CacheSize=1024, M
axFrameSize=9223372036854775807, CacheEnabled=true, SizePrefixDisabled=false, TcpNoDelayEnabled=true, MaxInactivityDurationInitalDelay=10000
, MaxInactivityDuration=60000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[e,M,Q]}
///////end///////////
取:localWireFormatInfo和remoteWireFormatInfo中MaxInactivityDuration的最小值,所以要同时考虑server和服务器端该值的大小
/////////////begin///////
2014-01-16 16:22:43,096 | DEBUG | Using min of local: WireFormatInfo { version=10, properties={MaxFrameSize=9223372036854775807, CacheSize=1
024, CacheEnabled=true, SizePrefixDisabled=false, MaxInactivityDurationInitalDelay=10000, TcpNoDelayEnabled=true, MaxInactivityDuration=9000
0, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[e,M,Q]} and remote: WireFormatInfo { version=10, properties={CacheSize=1024, M
axFrameSize=9223372036854775807, CacheEnabled=true, SizePrefixDisabled=false, TcpNoDelayEnabled=true, MaxInactivityDurationInitalDelay=10000
, MaxInactivityDuration=120000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[e,M,Q]}
/////////////end/////////
localWireFormatInfo中的MaxInactivityDuration=9000,而remoteWireFormatInfo中的MaxInactivityDuration=120000,
【总结】:如果提示:Channecl was inactive for too(>30000) long的警告,说明该通道处于非活动时间已有30秒,
AMQ中对每个transport都有一个是否活动的检查,检查是否活动的间隔周期是readCheckTime,该参数由MaxInactivityDuration进行设置,
默认是取客户端和服务器端通道WireFormatInfo提供的MaxInactivityDuration的最小值,而设置方式如下:
1、客户端:如:private final String URL = "failover:(tcp://cnd:61616?wireFormat.maxInactivityDuration=120000)";
2、服务器端:如:<transportConnector name="nio" uri="nio://0.0.0.0:61616?wireFormat.maxInactivityDuration=90000"/>
【提示】:在类:com.cnd.emq.transport.InactivityMonitor中有方法startMonitorThreads,来根据读(readCheckTime)和写(writeCheckTime)的检查时间是否大于0,决定是否启动读和写的检查定时器,
所以,对应AMQ,默认读的检查间隔,readCheckTime,由WireFormatInfo中的MaxInactivityDuration来控制。
由此推断,只有将server或者client的MaxInactivityDuration设置为0的话(即采用长连接机制),MQ就不会进行通道的间隔检查。即不会启动是否活动监控的读写检查线程;
3、注意:读检查间隔(readCheckTime)和写检查间隔(writeCheckTime)的关系,如果readCheckTime大于3,则writeCheckTime为其1/3,否则两者相等,而读检查间隔时间来自MaxInactivityDuration,
所以建议MaxInactivityDuration配置为3的倍数。
4、写间隔是读间隔的1/3。默认读间隔是30000ms,写是10000ms。
5、不配置端按默认30000ms算,即30s,如果客户端和服务器端都不配置此参数的话,那就是30s,如果两端都配置,则取最小的值。==>最终取两端的最小值。
6、检查关键字【Using min of local: WireFormatInfo】
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:
分享到:
相关推荐
ActiveMQ(中文)参考手册 ActiveMQ(中文)参考手册 ActiveMQ(中文)参考手册 ActiveMQ(中文)参考手册
ActiveMQ路由配置是Apache ActiveMQ项目中的一种重要配置方式,它依赖另一个Apache项目Camel。ActiveMQ集成了Camel,启动时同时会启动Camel。通过Camel Web Console可以进行Routing配置。 使用Camel Choice进行配置...
ActiveMQ是中国最流行的开源消息中间件之一,由Apache软件基金会开发。它基于Java Message Service (JMS) 规范,提供了可靠的消息传递功能,适用于分布式系统中的应用间通信。本压缩包“activeMQ收发工具.rar”包含...
在IT行业中,MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅式消息传输协议,常用于物联网(IoT)设备之间的通信。它设计得简单、高效,适合资源有限的设备以及在网络条件不稳定的情况下工作。...
在分布式系统中,消息队列(Message Queue)作为解耦组件和异步处理的重要工具,Apache ActiveMQ 是一款广泛使用的开源消息中间件。本篇主要围绕"ActiveMQ中Topic持久化Demo"进行深入探讨,旨在帮助读者理解如何在...
在Windows系统上搭建ActiveMQ集群是一项关键的任务,它涉及到分布式消息传递系统的设计和优化。ActiveMQ是Apache软件基金会开发的一款开源消息代理,它遵循Java Message Service (JMS) 规范,提供高可靠的消息传递...
在IT行业中,Apache ActiveMQ是一个广泛使用的开源消息代理和队列服务器,它支持多种协议,如AMQP、STOMP、XMPP、OpenWire等。在C#环境下使用ActiveMQ,可以方便地实现应用程序间的异步通信和数据交换。标题...
在ActiveMQ中开启jmx监控需要进行一些配置,包括编辑bin/activemq文件和conf/activemq.xml文件,以及设置jmx.password和jmx.access文件的权限。在配置过程中,需要注意jmxremote.port和rmi.port的设置,确保它们不...
.ActiveMQ中文手册 ActiveMQ中文手册是一个关于ActiveMQ的详细手册,旨在帮助开发者更好地理解和使用ActiveMQ。下面是从手册中提炼出的相关知识点: 1. JMS基本构件 * 连接工厂:客户用来创建连接的对象,例如...
Apache ActiveMQ是业界广泛使用的开源消息中间件,它遵循Java Message Service (JMS) 规范,提供高效、可靠的异步消息传递服务。在“activemqactivemq”这个主题下,我们主要关注如何使用ActiveMQ进行消息的接收和...
ActiveMQ是中国最流行的开源消息中间件之一,它基于Java Message Service (JMS) 规范,为分布式系统提供高效、可靠的消息传递服务。ActiveMQ API是开发者与ActiveMQ交互的主要接口,提供了丰富的功能来实现消息的...
- **修改TCP端口**:如果需要修改 ActiveMQ 的默认监听端口(61616),可以在 `activemq.xml` 文件中找到 `<transportConnectors>` 标签,然后修改 `<connector>` 中的 `uri` 属性。 ```xml ``` - **消息池的...
ActiveMQ客户端库是用于与ActiveMQ服务器交互的接口,允许开发者在他们的应用中发送和接收消息。这个压缩包包含的是Apache ActiveMQ 5.10.0版本,它是一个稳定且广泛使用的版本。 ActiveMQ客户端的核心概念: 1. *...
apache-activemq-5.15.7-bin.tar.gz ,centos下的apache-activemq-5.15.7安装工具文件,需要解压,解压后就是apache-activemq-5.15.7-bin.tar.gz
1. **消息队列**: 它允许应用程序将消息放入队列中,由其他应用程序按照FIFO(先进先出)原则消费,确保消息的可靠传输。 2. **主题发布/订阅模式**: 通过主题,多个消费者可以订阅同一个消息,实现广播式的消息...
Apache ActiveMQ 是一个开源的消息中间件,它实现了多种消息协议,如JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol),并且广泛应用于分布式系统中,提供可靠的消息传递和队列管理。...