5

Apache Pulsar 的 API ( https://pulsar.apache.org/api/client/org/apache/pulsar/client/api/Consumer.html ) 包括至少两种使用来自 Pulsar 主题/队列的消息的方法:

  1. 使用 Consumer.receive()(或 Consumer.receiveAsync())
  2. 使用 ConsumerBuilder.messageListener(MessageListener messageListener) 添加消息侦听器,它将对 Consumer 的引用和 Message 发送到 MessageListener 的实例

大多数情况下,感觉这些是平等的,并且使用 MessageListener 的类似事件的方法是有意义的,除了 Consumer 对象具有我发现在受控的 while 循环中可能有用的其他方法,例如: isConnected() 、receiveAsync()、pause()、resume() 和 seek(MessageId messageId)。

有了 Consumer 类中的这些附加功能,即使将 Consumer 传递给 MessageListener,为什么不为消费者提供一个简单的循环而不是使用单个 MessageListener?

在 Pulsar 中使用 MessageListener 是否有优势或偏好,或者这只是给开发人员的一个选项?

过去,我主要为 JMS 和 Kafka 编写消费者循环。

4

1 回答 1

3

侦听器模式通常是一种更好的 OOP 设计。它使代码更简洁,最重要的是它很好地应用了 SOLID 原则。

基本上,您需要根据每条消息执行业务逻辑,并像线程模型一样管理消费者/读者基础设施。Java 事件侦听器模式是分离业务逻辑和管理线程的答案。业务逻辑在侦听器类中实现。addListener(theClass)它可以与消费者/读者创建一起添加一行。它更干净。

使用 addListener,仍然可以选择在同一个类/文件中添加具有业务逻辑的 lambda 函数。我认为这是为了简单的处理需求。

在 Pulsar 客户端的特殊情况下,客户端 API 在技术上可以为您管理侦听器线程。那是另一个好处。

于 2020-01-14T16:45:46.670 回答