gpt4 book ai didi

spring-boot - 启用@KafkaListener以从application.yml文件中获取可变主题名称

转载 作者:行者123 更新时间:2023-12-03 23:52:33 36 4
gpt4 key购买 nike

我正在尝试将多个主题加载到单个@KafkaListener中,但是由于遇到麻烦,因为我认为它正在寻找恒定值,但是从topics文件初始化application.yml变量导致出现问题,我想知道是否有人可以帮助我进行故障排除这个问题,或者为我提供有关如何将多个Kafka主题加载到单个KafkaListener中的指导。

通过将它们传递给以逗号分隔的对象,我可以在同一个@KafkaListener中收听多个主题,如下所示:

@KafkaListener(topics = {
"flight-events",
"flight-time-events",
"service-events",
"flight-delay-events"
})

我意识到我可以用逗号分隔值表示主题的对象,但是我希望能够通过配置文件添加主题,而不是更改代码库中的代码。

我相信可能存在问题,因为@KafkaListener需要采用一个常量值,而我无法将注释定义为常量,对此有什么办法吗?
KafkaWebSocketConnector.java
@Component
public class KafkaWebSocketConnector
{


@Value("${spring.kafka.topics}")
private String[] topics;

@KafkaListener(topics = topics)
public void listen(ConsumerRecord<?, Map<String, String>> message)
{
log.info("Received messages on topic [{}]: [{}]", message.topic(), message.value());
String dest = "/" + message.topic();
log.info("destination = {}", dest);
log.info("msg: {}", message);
messageTemplate.convertAndSend(dest, message.value());
}
}
application.yml
spring:
kafka:
consumer:
auto-offset-reset: earliest
group-id: kafka-websocket-connector
topics: flight-events,
flight-time-events,
canceled-events,
pax-events,
flight-delay-events

最佳答案

来自此 GitHub 问题的@Gary Russell 提供的答案:

https://github.com/spring-projects/spring-kafka/issues/361

您可以使用 SpEL 表达式; EnableKafkaIntegrationTests 中有一个示例...

@KafkaListener(id = "foo", topics = "#{'${topicOne:annotated1,foo}'.split(',')}")

在我的情况下 "#{'${spring.kafka.topics}'.split(',')}"
为了回答上述问题,我能够实现上述代码(由 Gary Russell 提供)。

关于spring-boot - 启用@KafkaListener以从application.yml文件中获取可变主题名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934403/

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