簡體   English   中英

啟用@KafkaListener以從application.yml文件中獲取可變主題名稱

[英]Enabling @KafkaListener to take in variable topic names from application.yml file

我試圖在多個主題加載到一個@KafkaListener但我遇到了麻煩,因為我相信它正在尋找一個恆定值,但初始化topics從變量application.yml文件造成什么問題,我如果有人能夠知道幫助我解決此問題,或為我提供有關如何將多個Kafka主題加載到單個KafkaListener中的指導。

通過將它們傳遞@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

@Gary Russell從此GitHub問題提供的答案:

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提供)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM