`
can_do
  • 浏览: 263694 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ActiveMQ中由【Channel was inactive for too(30000) long】想到的

阅读更多
【日志】警告信息如下:
//////////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(中文)参考手册

    ActiveMQ路由配置方式

    ActiveMQ路由配置是Apache ActiveMQ项目中的一种重要配置方式,它依赖另一个Apache项目Camel。ActiveMQ集成了Camel,启动时同时会启动Camel。通过Camel Web Console可以进行Routing配置。 使用Camel Choice进行配置...

    activeMQ收发工具.rar

    ActiveMQ是中国最流行的开源消息中间件之一,由Apache软件基金会开发。它基于Java Message Service (JMS) 规范,提供了可靠的消息传递功能,适用于分布式系统中的应用间通信。本压缩包“activeMQ收发工具.rar”包含...

    qt activemq mqtt 动态库

    在IT行业中,MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅式消息传输协议,常用于物联网(IoT)设备之间的通信。它设计得简单、高效,适合资源有限的设备以及在网络条件不稳定的情况下工作。...

    ActiveMQ中Topic持久化Demo

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

    window系统搭建activeMQ集群和操作步骤

    在Windows系统上搭建ActiveMQ集群是一项关键的任务,它涉及到分布式消息传递系统的设计和优化。ActiveMQ是Apache软件基金会开发的一款开源消息代理,它遵循Java Message Service (JMS) 规范,提供高可靠的消息传递...

    ACTIVEMQ C#下的例子

    在IT行业中,Apache ActiveMQ是一个广泛使用的开源消息代理和队列服务器,它支持多种协议,如AMQP、STOMP、XMPP、OpenWire等。在C#环境下使用ActiveMQ,可以方便地实现应用程序间的异步通信和数据交换。标题...

    jmx监控activeMQ监控

    在ActiveMQ中开启jmx监控需要进行一些配置,包括编辑bin/activemq文件和conf/activemq.xml文件,以及设置jmx.password和jmx.access文件的权限。在配置过程中,需要注意jmxremote.port和rmi.port的设置,确保它们不...

    ActiveMQ中文手册

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

    activemqactivemq

    Apache ActiveMQ是业界广泛使用的开源消息中间件,它遵循Java Message Service (JMS) 规范,提供高效、可靠的异步消息传递服务。在“activemqactivemq”这个主题下,我们主要关注如何使用ActiveMQ进行消息的接收和...

    activeMQ-API.rar

    ActiveMQ是中国最流行的开源消息中间件之一,它基于Java Message Service (JMS) 规范,为分布式系统提供高效、可靠的消息传递服务。ActiveMQ API是开发者与ActiveMQ交互的主要接口,提供了丰富的功能来实现消息的...

    activemq activeMq笔记

    - **修改TCP端口**:如果需要修改 ActiveMQ 的默认监听端口(61616),可以在 `activemq.xml` 文件中找到 `&lt;transportConnectors&gt;` 标签,然后修改 `&lt;connector&gt;` 中的 `uri` 属性。 ```xml ``` - **消息池的...

    ActiveMQ客户端

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

    activemq 5.15.7 for centos.zip

    apache-activemq-5.15.7-bin.tar.gz ,centos下的apache-activemq-5.15.7安装工具文件,需要解压,解压后就是apache-activemq-5.15.7-bin.tar.gz

    apache-activemq Linux版本

    1. **消息队列**: 它允许应用程序将消息放入队列中,由其他应用程序按照FIFO(先进先出)原则消费,确保消息的可靠传输。 2. **主题发布/订阅模式**: 通过主题,多个消费者可以订阅同一个消息,实现广播式的消息...

    ActiveMQ 配置文件详解

    Apache ActiveMQ 是一个开源的消息中间件,它实现了多种消息协议,如JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol),并且广泛应用于分布式系统中,提供可靠的消息传递和队列管理。...

Global site tag (gtag.js) - Google Analytics