为什么在 Apache Pulsar 中使用 MessageListeners 而不是简单地使用 Consumer.receive()?
Why Use MessageListeners in Apache Pulsar and Not Simply Consumer.receive()?
Apache Pulsar 的 API (https://pulsar.apache.org/api/client/org/apache/pulsar/client/api/Consumer.html) 包括至少两种使用来自 Pulsar 的消息的方法 topic/queue:
- 使用Consumer.receive()(或Consumer.receiveAsync())
- 使用ConsumerBuilder.messageListener(MessageListener messageListener) 添加消息侦听器,它发送对 Consumer 和 Message 的引用到 MessageListener 的实例
大多数情况下,感觉它们是平等的,使用 MessageListener 的类事件方法是有意义的,除了 Consumer 对象有其他方法,我发现这些方法在受控的 while 循环中可能有用,例如如:isConnected()、receiveAsync()、pause()、resume() 和 seek(MessageId messageId)。
有了 Consumer class 中的这些附加功能,即使 Consumer 被传递到 MessageListener,为什么不为消费者提供一个简单的循环而不是使用单个 MessageListener?
在 Pulsar 中使用 MessageListener 是否有优势或偏好,或者这只是提供给开发人员的一个选项?
过去我主要为 JMS 和 Kafka 编写消费者循环。
侦听器模式通常是更好的 OOP 设计。它使代码更加简洁,最重要的是它很好地应用了 SOLID 原则。
基本上,您需要根据每条消息执行业务逻辑,并管理 consumer/reader 线程模型等基础设施。 Java 事件侦听器模式是分离业务逻辑和管理线程的答案。业务逻辑在监听器class中实现。可以在consumer/reader创建时加一行addListener(theClass)
。干净多了。
使用 addListener,仍然可以选择在同一个 class/file 中添加具有业务逻辑的 lambda 函数。我认为这是为了简单的处理需要。
在 Pulsar 客户端的特定情况下,the client API 技术上可以为您管理侦听器线程。那是另一个好处。
Apache Pulsar 的 API (https://pulsar.apache.org/api/client/org/apache/pulsar/client/api/Consumer.html) 包括至少两种使用来自 Pulsar 的消息的方法 topic/queue:
- 使用Consumer.receive()(或Consumer.receiveAsync())
- 使用ConsumerBuilder.messageListener(MessageListener messageListener) 添加消息侦听器,它发送对 Consumer 和 Message 的引用到 MessageListener 的实例
大多数情况下,感觉它们是平等的,使用 MessageListener 的类事件方法是有意义的,除了 Consumer 对象有其他方法,我发现这些方法在受控的 while 循环中可能有用,例如如:isConnected()、receiveAsync()、pause()、resume() 和 seek(MessageId messageId)。
有了 Consumer class 中的这些附加功能,即使 Consumer 被传递到 MessageListener,为什么不为消费者提供一个简单的循环而不是使用单个 MessageListener?
在 Pulsar 中使用 MessageListener 是否有优势或偏好,或者这只是提供给开发人员的一个选项?
过去我主要为 JMS 和 Kafka 编写消费者循环。
侦听器模式通常是更好的 OOP 设计。它使代码更加简洁,最重要的是它很好地应用了 SOLID 原则。
基本上,您需要根据每条消息执行业务逻辑,并管理 consumer/reader 线程模型等基础设施。 Java 事件侦听器模式是分离业务逻辑和管理线程的答案。业务逻辑在监听器class中实现。可以在consumer/reader创建时加一行addListener(theClass)
。干净多了。
使用 addListener,仍然可以选择在同一个 class/file 中添加具有业务逻辑的 lambda 函数。我认为这是为了简单的处理需要。
在 Pulsar 客户端的特定情况下,the client API 技术上可以为您管理侦听器线程。那是另一个好处。