ActiveMQ---ActiveMQ原理分析之消息消费
Posted flgb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActiveMQ---ActiveMQ原理分析之消息消费相关的知识,希望对你有一定的参考价值。
消费端消费消息的原理
我们通过上一节课的讲解,知道有两种方法可以接收消息,一种是使用同步阻塞的MessageConsumer#receive方
法。另一种是使用消息监听器MessageListener。这里需要注意的是,在同一个session下,这两者不能同时工
作,也就是说不能针对不同消息采用不同的接收方式。否则会抛出异常。
至于为什么这么做,最大的原因还是在事务性会话中,两种消费模式的事务不好管控
消费端消费消息源码分析
ActiveMQMessageConsumer.receive消费端同步接收消息的源码入口
public Message receive() throws JMSException { checkClosed(); checkMessageListener(); //检查receive和MessageListener是否同时配置在当前的会话中 sendPullCommand(0); //如果PrefetchSizeSize为0并且unconsumerMessage为空,则发起pull命令 MessageDispatch md = dequeue(-1); //从unconsumerMessage出队列获取消息 if (md == null) { return null; } beforeMessageIsConsumed(md); afterMessageIsConsumed(md, false); //发送ack给到broker return createActiveMQMessage(md);//获取消息并返回 }
以上是关于ActiveMQ---ActiveMQ原理分析之消息消费的主要内容,如果未能解决你的问题,请参考以下文章