Вы не можете создавать @KafkaListener
s программно, только контейнеры дискретных слушателей (с настраиваемым слушателем).
Это можно сделать программным путем, создавая дочерний контекст приложения для каждого слушателя.
РЕДАКТИРОВАТЬ
@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, дочерний класс конфигурации и слушатель должны быть в другом пакете с основным приложением (и не в подпакете).