在 JMS 中,MessageListener 和 Consumer 之间有什么区别?

2022-09-02 23:47:01

我是 新来的.据我所知,消费者能够从队列/主题中选择消息。那么,为什么需要一个 MessageListener,因为消费者会知道他们何时拾取了消息呢?这种留言者的实际用途是什么?JMS

编辑:来自MessageListener的Javadoc

对象用于接收异步传递的消息。

每个会话必须确保它以串行方式将消息传递给侦听器。这意味着分配给同一会话的一个或多个使用者的侦听器可以假定在会话完成最后一次调用之前,不会使用下一条消息调用 onMessage 方法。

因此,我对术语的异步用法和串行用法感到困惑。这两个术语在描述的特征时有什么关系?MessageListener


答案 1

不同之处在于,MessageConsumer 用于同步接收消息:

MessageConsumer mc = s.createConsumer(queue);
Message msg = mc.receive();

对于异步传递,我们可以向消息使用者注册一个 MessageListener 对象:

mc.setMessageListener(new MessageListener() {
    public void onMessage(Message msg) {
        ...
    }
});

答案 2

文档

对于同步接收,客户端可以使用其接收方法之一从消息使用者请求下一条消息。

对于异步传递,客户端可以向消息使用者注册 MessageListener 对象。


推荐