Apache Pulsar 的 API ( https://pulsar.apache.org/api/client/org/apache/pulsar/client/api/Consumer.html ) 包括至少两种使用来自 Pulsar 主题/队列的消息的方法:
- 使用 Consumer.receive()(或 Consumer.receiveAsync())
- 使用 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 编写消费者循环。