消耗来自同一kafka主题的字符串和JSON消息-反序列化问题

时间:2020-02-13 05:00:20

标签: java spring-kafka

JSON消息正在由字符串使用者使用。我的产品发送两种类型的消息:字符串和序列化JSON

@KafkaListener(topics = "${kafka.topic}", groupId = "${kafka.group-id}", containerFactory = "${kafka.string-listener-container-factory}")
public void consume(@NotNull ConsumerRecord<String, String> cr, @Payload String payload) {
    log.debug("Received asset id: {}, with key: {}, Partition: {}, Offset: {}  ", payload, cr.key(), cr.partition(),
            cr.offset());

}


@KafkaListener(topics = "${kafka.topic}", groupId = "${kafka.group-id}", containerFactory = "${kafka.json-listener-container-factory}")
public void consumeAssetEvent(@NotNull ConsumerRecord<String, Event> cr, @Payload Event payload) {
    log.debug("Received asset id: {}, with key: {}, Partition: {}, Offset: {}  ", payload, cr.key(), cr.partition(),
            cr.offset());

}

消费者方面,我有两个消费者 1.听字符串信息 2.侦听json并反序列化为对象

即使JSON消息也被String侦听器使用。

1 个答案:

答案 0 :(得分:2)

使用者中没有过滤器功能,可以根据您设置的Serde(例如string,json等)区分消息。 生产者发送消息时,它将在kafka主题中转换为byte []。 然后,通过消费者反序列化设置对该字节[]进行反序列化。

因此,没有默认方法可以将字符串消息过滤到字符串使用者,将json过滤到json使用者。创建接收所有数据并检查它是否为json的侦听器,或者更改字符串和json的主题(将字符串发送到一个主题,将json发送到另一个主题,并相应地使用)。