Spring-Kafka 对多个 @Kafkalistener 的 ConcurrentKafkaListenerContainerFactory 使用
Spring-Kafka usage of ConcurrentKafkaListenerContainerFactory for more than One @Kafkalistener
我正在使用 Spring-Kafka 框架实现对来自 Kafka 主题的消息的消费。我试图了解我为 Kafka Listener 创建的 ConcurrentKafkaListenerContainerFactory 的一些用法。 @KafkaListener 工作正常并且符合预期,但是,在我的场景中,我有多个独立的 Listener,分别收听多个 Topic。我想知道我是否可以在我所有的监听器中重用 ConcurrentKafkaListenerContainerFactory,或者我是否必须为每个 @KafkaListener 创建一个 containerFactory。有没有一种方法可以让所有@Kafkalisteners
共享一个通用的 containerFactory
谢谢
是;这就是重点——它是监听器容器的工厂;您通常只需要一个启动自动配置的工厂。
如果您需要侦听器的不同属性(例如反序列化器),最新版本(自 spring-kafka 2.2.4 起)允许您覆盖注释上的消费者属性。
覆盖其他属性,例如容器属性,对于单个侦听器,将侦听器容器定制器添加到工厂。
@Component
class ContainerFactoryCustomizer {
ContainerFactoryCustomizer(AbstractKafkaListenerContainerFactory<?, ?, ?> factory) {
factory.setContainerCustomizer(
container -> {
String groupId = container.getContainerProperties().getGroupId();
if (groupId.equals("foo")) {
container.getContainerProperties().set...
}
else {
container.getContainerProperties().set...
}
});
}
如您所见,您可以通过访问groupId()
容器属性.
来判断我们正在创建哪个容器。
如果您的侦听器具有截然不同的配置,您可能想使用 2 个工厂,但这样您就失去了启动的自动配置功能(至少对于工厂而言)。
我正在使用 Spring-Kafka 框架实现对来自 Kafka 主题的消息的消费。我试图了解我为 Kafka Listener 创建的 ConcurrentKafkaListenerContainerFactory 的一些用法。 @KafkaListener 工作正常并且符合预期,但是,在我的场景中,我有多个独立的 Listener,分别收听多个 Topic。我想知道我是否可以在我所有的监听器中重用 ConcurrentKafkaListenerContainerFactory,或者我是否必须为每个 @KafkaListener 创建一个 containerFactory。有没有一种方法可以让所有@Kafkalisteners
共享一个通用的 containerFactory谢谢
是;这就是重点——它是监听器容器的工厂;您通常只需要一个启动自动配置的工厂。
如果您需要侦听器的不同属性(例如反序列化器),最新版本(自 spring-kafka 2.2.4 起)允许您覆盖注释上的消费者属性。
覆盖其他属性,例如容器属性,对于单个侦听器,将侦听器容器定制器添加到工厂。
@Component
class ContainerFactoryCustomizer {
ContainerFactoryCustomizer(AbstractKafkaListenerContainerFactory<?, ?, ?> factory) {
factory.setContainerCustomizer(
container -> {
String groupId = container.getContainerProperties().getGroupId();
if (groupId.equals("foo")) {
container.getContainerProperties().set...
}
else {
container.getContainerProperties().set...
}
});
}
如您所见,您可以通过访问groupId()
容器属性.
如果您的侦听器具有截然不同的配置,您可能想使用 2 个工厂,但这样您就失去了启动的自动配置功能(至少对于工厂而言)。