activemq 常见问题
来源:互联网 发布:数据挖掘关联规则算法 编辑:程序博客网 时间:2024/06/05 17:42
问题描述:
这样配置就针对这个URI下的所有queue都生效。如果只想对某一个队列来配置,可以用方式二在destination上配置方式如下
这样就只对queue com.foo生效
producer插入MQ的时候出现,客户端插入消息失败,提示服务器无命令应答返回的情况,让用户检查broker的有效性。
详细的错误信息就不列了。
MQ服务器端日志输出[INFO]Transport failed: java.io.EOFException | org.apache.activemq.broker.TransportConnection.Transport
问题原因:
MQ配置文件里配置了ProducerFlowControl='true',而且memorylimit过小导致的。
这个策略生效的方式是在它的策略里配置
<pendingQueuePolicy>
<vmQueueCursor />
</pendingQueuePolicy>
才会生效。所以如果为了防止内存使用过大,可以配置相应的属性。但是,一定要设置好内存限制,否则就会出现上面的错误。
解决方式:
1、配置合理的限制。
2、另外就是去掉这个配置项。
注,当队列中数据过大的时候,虽然没有配置这个限制,也一样会出现相同的问题,所以最好不要盲目的堆积消息。
问题描述:
当一个MQ队列里已经有几百条消息,而没有产生新消息的时候,现在先开启一个consumer去从队列里取消息,可以正常取到,但是当想再开一个consumer的时候却一条消息也取不到,只有等有新的消息生成的时候才可以取到。(其中consumer通过receive来获取消息,不过相信事件触发回调的方式也一样)。难道这是activemq的BUG经过分析问题不是这样的。
问题原因:
问题的原因,因为Activemq服务器端为了加速指令分发,所以会根据consumer的配置来做prefetch也就是消息预取,所以当开启一个consumer的时候,消息队列里的消息都分配给了第一个consumer这样,第二个再起来也不可能正常获取没有处理的指令,看着现像就想是不能支持多consumer。而新指令产生了,自然会分配给空闲的consumer。所以新指令可以正常给第二个consumer。这样一分析,问题就出现在consumer的prefetchsize配置。
解决方式:
给consumer配置prefetchsize
方式1:在URI配置
failover://(tcp://localhost:61616)?cms.PrefetchPolicy.queuePrefetch=1
这样配置就针对这个URI下的所有queue都生效。如果只想对某一个队列来配置,可以用方式二在destination上配置方式如下
方式2:在destination配置
com.foo?consumer.prefetchSize=2
这样就只对queue com.foo生效
- activemq 常见问题
- ActiveMQ使用常见问题总结
- activemq系列-常见问题解析
- activeMQ安全配置及常见问题解决
- ActiveMQ
- ACtiveMQ
- ACtiveMQ
- activeMQ
- ActiveMQ
- activeMQ
- activeMQ
- activemq
- ActiveMQ
- ActiveMQ
- ActiveMQ
- ActiveMQ
- activeMQ
- activemq
- SQL学习网站
- 负载均衡
- 埋藏
- Servlet映射规则和Servlet的映射URL冲突时匹配原则
- QFont
- activemq 常见问题
- request.getParameter()与session.getAttribute()类型比较
- 数据结构各种排序算法及其java程序实现
- OpenMP编程指南
- UML建模之用例图
- GEOM7004 Assignment 2 Question 1
- 攻击SharePoint
- linux下开源电子设计软件
- prototype用法总结