【问题标题】:How to handle events from kafka lister using POJO's?如何使用 POJO 处理来自 kafka lister 的事件?
【发布时间】:2018-01-03 16:55:02
【问题描述】:

我正在尝试使用注释 @KafkaListener 并收听我自己的事件:

  public class Listener {
        @KafkaListener(id = "SimpleListener", topics = "mytopic")
        public void receive(SimpleEvent event) {
             ...
        }
    }

  @Component     
  public class MyEventHandler {
      @EventListener
      public void eventHandler(SimpleEvent event) {
           ...
      }
   }

这样可以吗?我想监听事件并在服务组件中处理每个不同的事件。

【问题讨论】:

    标签: java spring-boot spring-kafka


    【解决方案1】:

    正确。这可以通过MessageConverter 注入ContainerFactory: https://docs.spring.io/spring-kafka/docs/2.1.0.RELEASE/reference/html/_reference.html#serdes

    【讨论】:

    • 有一个Introduction 章节:docs.spring.io/spring-kafka/docs/2.1.0.RELEASE/reference/html/…。您需要将MessageConverter 添加到ConcurrentKafkaListenerContainerFactory bean 定义中,以便能够将byte[] 反序列化到您的SimpleEvent 中。
    • 我只是想在事件被消费时收听,但是当消息到达时没有任何反应..真的有必要吗?
    • 不确定你的意思。您的`@EventListener` 与@KafkaListener 无关。第一个由 ApplicationEventPublisher 触发,第二个由 Apache Kafka 消费者触发。因此,如果您想触发应用程序事件,您应该使用 receive() 方法中的第一个事件。
    • 在 Event Consumption 中有一个显示事件处理程序的示例: public void eventHandler(ListenerContainerIdleEvent event) 并用 @EventListener 注释我认为当@KafkaListener 监听消息时可能触发事件然后在另一个类(MyEventHandler)中处理
    • 不,那不是。见这里:docs.spring.io/spring/docs/5.0.2.RELEASE/…@KafkaListener 由容器触发。我不确定你为什么需要@EventListener,因为你刚刚消费了来自 Kafka 的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2019-06-06
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多