码迷,mamicode.com
首页 > 其他好文 > 详细

ActiveMQ(4)---ActiveMQ原理分析之消息消费

时间:2019-04-08 00:53:28      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:png   ref   send   命令   最大的   会话   消费   list   throw   

消费端消费消息的原理

我们通过上一节课的讲解,知道有两种方法可以接收消息,一种是使用同步阻塞的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(4)---ActiveMQ原理分析之消息消费

标签:png   ref   send   命令   最大的   会话   消费   list   throw   

原文地址:https://www.cnblogs.com/flgb/p/10668191.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!