消费端消费消息的原理
我们通过上一节课的讲解,知道有两种方法可以接收消息,一种是使用同步阻塞的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);//获取消息并返回 }
原文地址:https://www.cnblogs.com/flgb/p/10668191.html
时间: 2024-11-11 16:41:26