跳到主要内容
版本:4.1.1

接收消息

Doubao 中英对照 Receiving Messages

接收消息总是比发送稍微复杂一些。接收 Message 有两种方式。较简单的方式是用一个轮询方法调用一次轮询一条 Message。较复杂但更常见的方式是注册一个监听器,按需异步接收 Message。我们在接下来的两个小节中分别考察这两种方式的示例。

本节总结​

📄️选择容器

2.0 版引入了 DirectMessageListenerContainer(DMLC)。此前,只有 SimpleMessageListenerContainer(SMLC)可用。SMLC 为每个消费者使用一个内部队列和一个专用线程。如果一个容器被配置为监听多个队列,则用同一个消费者线程处理所有队列。并发度由 concurrentConsumers 和其他属性控制。当消息从 RabbitMQ 客户端到达时,客户端线程通过队列把它们转交给消费者线程。这种架构在当时是必要的,因为在 RabbitMQ 客户端的早期版本中,无法进行多个并发投递。较新版本的客户端有了修订后的线程模型,现在可以支持并发。这使得 DMLC 得以引入,现在监听器直接在 RabbitMQ 客户端线程上被调用。因此,它的架构实际上比 SMLC 更"简单"。然而,这种方式存在一些限制,SMLC 的某些特性在 DMLC 上不可用。此外,并发度由 consumersPerQueue(以及客户端库的线程池)控制。concurrentConsumers 及相关属性在此容器上不可用。