activemq 常见问题

问题描述:
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生效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些ActiveMQ常见的面试题: 1. 什么是ActiveMQ?它的作用是什么? 答:ActiveMQ是一个开源的消息中间件,它的作用是实现异步通信和消息传递,可以用于解耦、异步处理、流量削峰等场景。 2. ActiveMQ的消息模型有哪些?它们的区别是什么? 答:ActiveMQ的消息模型包括点对点(P2P)模型和发布/订阅(Pub/Sub)模型,P2P模型中每个消息只有一个消费者可以消费,而Pub/Sub模型中每个消息可以被多个消费者消费。 3. ActiveMQ的消息传递方式有哪些?它们的区别是什么? 答:ActiveMQ的消息传递方式包括同步传递和异步传递,同步传递是指生产者发送消息后需要等待消费者返回确认消息之后才能继续发送下一个消息,而异步传递则是生产者发送消息后不需要等待消费者的确认消息,可以立即发送下一个消息。 4. ActiveMQ的消息持久化方式有哪些?它们的区别是什么? 答:ActiveMQ的消息持久化方式包括文件(File)持久化和数据库(Database)持久化,文件持久化是将消息保存在本地的文件系统中,而数据库持久化则是将消息保存在数据库中。 5. ActiveMQ的消息监听方式有哪些?它们的区别是什么? 答:ActiveMQ的消息监听方式包括消息驱动(Message-Driven)和轮询(Polling)两种,消息驱动是指在消息到达时立即通知消费者进行处理,而轮询则是在一定时间间隔内不断地检查是否有消息到达。 6. ActiveMQ和RabbitMQ的区别和联系是什么? 答:ActiveMQ和RabbitMQ都是开源的消息中间件,用于解耦、异步处理、流量削峰等场景,但是ActiveMQ相对于RabbitMQ更加灵活和易于使用,支持更多的协议和消息模型,而RabbitMQ则更加成熟和稳定,支持更多的消息传递方式和持久化方式。两者可以根据实际业务需求进行选择和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值