【问题标题】:Multiple implementations of kafka message (java Generics) [duplicate]kafka消息的多种实现(java泛型)[重复]
【发布时间】:2020-04-02 23:44:59
【问题描述】:

我正在尝试根据事件类型为 kafka 事件创建多个实现类。

public class KafkaListener {
    @Autowired
    Service service;

    @KafkaListener(topics = ("mytopic"), containerFactory = "kafkaListenerContainerFactory")
    public void consumeSource(Object event) {
        service.process(event);
    }
}

public interface Service<E> {
    void process(E event);
}

public class ServiceImpl1 implements Service<Event1> {
    void process(Event1 event1) {
         // process 
    }
}

public class ServiceImpl2 implements Service<Event2> {
    void process(Event2 event2) {
         // process 
    }
}

//Event1 & Event2 are 2 POJO classes with different inputs

是否可以实现或者我应该创建多个侦听器,每个事件类型一个?

【问题讨论】:

    标签: java spring-boot apache-kafka spring-kafka


    【解决方案1】:

    只要事件被Kafka反序列化,就可以使用类级别@KafkaListener和方法级别@KafkaHandlers。

    the documentation

    在类级别使用@KafkaListener 时,必须在方法级别指定@KafkaHandler。传递消息时,转换后的消息负载类型用于确定调用哪个方法。以下示例显示了如何执行此操作:

    @KafkaListener(id = "multi", topics = "myTopic")
    static class MultiListenerBean {
    
        @KafkaHandler
        public void listen(String foo) {
            ...
        }
    
        @KafkaHandler
        public void listen(Integer bar) {
            ...
        }
    
        @KafkaHandler(isDefault = true`)
        public void listenDefault(Object object) {
            ...
        }
    
    }
    

    从版本 2.1.3 开始,您可以指定一个 @KafkaHandler 方法作为默认方法,如果其他方法没有匹配则调用该方法。最多只能指定一种方法。使用@KafkaHandler methods 时,payload 必须已经转换为域对象(这样才能进行匹配)。使用自定义解串器 JsonDeserializerJsonMessageConverter 并将其 TypePrecedence 设置为 TYPE_ID。有关详细信息,请参阅序列化、反序列化和消息转换。

    【讨论】:

    • 您好@Gary,是否可以在Kafka Listener 配置级别上以某种方式配置不支持类型的事件将被跳过?我们每个微服务有数百个 KafkaListeners,当有人忘记添加“默认方法”时会非常混乱
    • 最好将此类问题作为一个新问题提出,而不是在对旧分析器的评论中提出,以便提供完整的代码答案。我已经问过并回答了here
    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多