activemq之MessageConsumer.receive方法

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

    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读取消息的!

猜你喜欢

转载自blog.csdn.net/john1337/article/details/81703297