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原理分析之消息消费的主要内容,如果未能解决你的问题,请参考以下文章

ActiveMQ---ActiveMQ原理分析之消息发送

ActiveMQ的安全机制使用及其源代码分析 [转]

Java自学教程!java反射的作用于原理

ActiveMQ——ActiveMQ的Transport

activeMQ集群的安装

ActiveMQ——ActiveMQ的集群