gpt4 book ai didi

spring-kafka - 卡夫卡之春 : How to create Listeners dynamically or in a loop?

转载 作者:行者123 更新时间:2023-12-01 13:17:13 25 4
gpt4 key购买 nike

我有 4 个 ConsumerFactory 听众正在阅读 4 个不同的主题,如下所示:

@KafkaListener(
id = "test1",
topicPattern = "test.topic1",
groupId = "pp-test1")
public void listenTopic1(ConsumerRecord<String, String> record) {
System.out.println("Topic is: " + record.topic());
}

但我们将有 50 个主题,我想设置至少 25 个听众以获得更好的性能。我怎样才能动态地执行此操作而不是手动编写 25 个监听器?

最佳答案

您不能以编程方式创建@KafkaListener,只能创建离散的监听器容器(带有自定义监听器)。

您可以通过编程方式为每个监听器创建子应用程序上下文来实现。

编辑

@SpringBootApplication
public class So53715268Application {

public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(So53715268Application.class, args);
for (int i = 0; i < 2; i++) {
AnnotationConfigApplicationContext child = new AnnotationConfigApplicationContext();
child.setParent(context);
child.register(ChildConfig.class);
Properties props = new Properties();
props.setProperty("group", "group." + i);
props.setProperty("topic", "topic" + i);
PropertiesPropertySource pps = new PropertiesPropertySource("listenerProps", props);
child.getEnvironment().getPropertySources().addLast(pps);
child.refresh();
}
}

}

@Configuration
@EnableKafka
public class ChildConfig {

@Bean
public Listener listener() {
return new Listener();
}

}

public class Listener {

@KafkaListener(id = "${group}", topics = "${topic}")
public void listen(String in) {
System.out.println(in);
}

}

: partitions assigned: [topic0-0]
: partitions assigned: [topic1-0]

请注意,如果您使用的是 Spring Boot,则子配置类和监听器必须位于与主应用程序不同的包中(也不是子包)。

关于spring-kafka - 卡夫卡之春 : How to create Listeners dynamically or in a loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53715268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com