activemq之MessageConsumer.receive方法

2022-03-29 14:26:05 浏览数 (2)

activemq提供的客户端分离了消息的读取以及接收,以Queue模式为例,这其中的中介就是ActiveMQMessageConsumer的unconsumedMessages属性(MessageDispatchChannel unconsumedMessages,该属性存储了将要被发送的消息),下面就以ActiveMQMessageConsumer:receive为例来说明读取消息:

代码语言:javascript复制
    public Message receive() throws JMSException {
         checkClosed();
         checkMessageListener();
 sendPullCommand(0);
         MessageDispatch md = dequeue(-1);
         if (md == null) {
             return null;
         }
        beforeMessageIsConsumed(md);
         afterMessageIsConsumed(md, false);
        return createActiveMQMessage(md);
     }

从上面的代码可以看到receive读取方法会先调用sendPullCommand方法向provider发送一条拉取消息的命令,provider在收到相应的命令后如果有消息则会把消息发送给该消费者,dequeue方法就是从unconsumedMessages读取消息的!

0 人点赞