当两个不同端口的应用程序通过两个不同的端口监听同一个kafka主题时,如何避免重复消息?

y3bcpkx1  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(510)

我的spring引导应用程序正在使用来自kafka主题的(apachecamel)消息。
同一个应用程序(运行在eclipse上的8080和运行在intellij上的9090)在同一台机器上的两个不同端口(8080和9090)上运行,因此两个端口的应用程序监听同一主题。
如何向特定端口使用者获取消息?
例如,如果我的主题收到“hi”消息,它会同时收到我的两个消费者(8080和9090)。
我不希望两个消费者都收到同样的信息。
“hi”消息仅由8080应用程序使用,“hello”消息由9090应用程序使用。
一次只有一个应用程序有机会接收消息,下一次机会是第二个应用程序。就像循环的。你能帮我找到解决这个问题的办法吗?

9wbgstp7

9wbgstp71#

你需要用同样的方法 groupId 对于每个消费者。如果用户使用相同的组id,则只有一个用户将收到消息。
具有相同组id的消费者将创建一个称为消费者组的东西。一个使用者组中只有一个使用者可以使用来自某个主题的不同消息,其他使用者将不能使用相同的消息。
您可以在中设置默认组id application.properties ```
spring.kafka.consumer.group-id=test_group

也可以将groupid设置为 `@KafkaListener` ```
@KafkaListener(id = "consumer2", topics = "topic", groupId = "test_group")
public void consumeLog(){

}

相关问题