簡體   English   中英

自定義轉換 Apache Kafka header 使用 Spring Kafka

[英]Custom conversion of Apache Kafka header using Spring Kafka

I am using Spring Boot 2.3.0 with Spring Kafka 2.5.0 in in my KafkaListener I am trying to map to map of the MessageHeaders to a custom class. 下面的代碼有效,但給了我字節 [] 中的 header,然后我必須將其轉換為偵聽器內部的 class(並為每個偵聽器重復此操作),我想避免這種情況。

    @Slf4j
    @Component
    @KafkaListener(topics = {"${spring.kafka.topics.simple}"}, groupId = "consumerGroup", 
    containerFactory = "kafkaListenerContainerFactory")
    public class RequestConsumer {

       @KafkaHandler
       public void listen(@Payload CustomerDetails customerDetails, @Header("sec") byte[] 
       principle, @Headers MessageHeaders messageHeaders) {
           log.info("Received a CustomerDetails");
       }

       @KafkaHandler(isDefault = true)
       public void listen(@Payload(required = false) GenericRecord object, @Headers 
       MessageHeaders messageHeaders) {
           log.info("Received an unexpected object");
       }
    }

我將代碼更改為此的那一刻:

    @KafkaHandler
    public void listen(@Payload CustomerDetails customerDetails, @Header("sec") PreAuthenticatedAuthenticationToken principle, @Headers MessageHeaders messageHeaders) {
        log.info("Received a CustomerDetails");
    }

偵聽器將因此錯誤而中斷:

org.springframework.kafka.listener.ListenerExecutionFailedException: Listener method 'public void com.example.demo.consumer.RequestConsumer.listen(com.example.schemas.CustomerDetails,org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken,org .springframework.messaging.MessageHeaders)' 拋出異常; 嵌套異常是 org.springframework.core.convert.ConverterNotFoundException:沒有找到能夠從類型 [byte[]] 轉換為類型 [@org.springframework.messaging.handler.annotation.Header org.springframework.security.Z2567A5EC9705EB7AC2C984033E0618DZ.authentation9 的轉換器.preauth.PreAuthenticatedAuthenticationToken]; 嵌套異常是 org.springframework.core.convert.ConverterNotFoundException:沒有找到能夠從類型 [byte[]] 轉換為類型 [@org.springframework.messaging.handler.annotation.Header org.springframework.security.Z2567A5EC9705EB7AC2C984033E0618DZ.authentation9 的轉換器.preauth.PreAuthenticatedAuthenticationToken]

I've looked over the https://docs.spring.io/spring-kafka/reference/html/#headers documentation which talks about header mapping from Headers to MessageHeaders and vise versa, but has no examples of converting those headers. 該錯誤似乎表明我可以以某種方式注冊一個轉換器,但沒有發現盡管有很多谷歌搜索並試圖單步執行 Spring Kafka 的代碼。

對此的幫助將不勝感激。

干杯,奧斯卡

我一直堅持下去,並找到了實現這一點的正確方法。 雖然我沒有找到轉換 header 的方法,但可以編寫一個 handlerMethodArgumentResolver 允許我們在偵聽器中使用自定義對象。 在此代碼中,很容易將 header 轉換為 PreAuthenticatedAuthenticationToken object,然后我可以直接在偵聽器中使用它。

更多詳細信息: https://docs.spring.io/spring-kafka/docs/2.5.3.RELEASE/reference/html/#adding-custom-handlermethodargumentresolver-to-kafkalistener

經驗證可以工作。

干杯。

暫無
暫無

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

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