当前位置: 首页 > 知识库问答 >
问题:

使用Spring Kafka实现Apache Kafka头的自定义转换

陈阳舒
2023-03-14

我正在使用Spring Boot 2.3.0和Spring Kafka 2.5.0,在我的KafkaListener中,我试图将MessageHeaders映射到一个自定义类。下面的代码可以工作,但给出了byte[]格式的头,然后我必须将其转换为侦听器内部的类(并对每个侦听器重复此操作),这是我希望避免的。

    @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 html" target="_blank">object");
       }
    }

当我将代码更改为:

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

我查看了https://docs.spring.io/spring-kafka/reference/html/#Headers文档,其中讨论了从header到MessageHeaders的头映射,反之亦然,但没有转换这些头的示例。这个错误似乎暗示我可以注册一个转换器,但没有找到如何,尽管许多谷歌搜索和尝试逐步通过Spring Kafka的代码。

在这方面提供帮助将不胜感激。

干杯,奥斯卡

共有1个答案

马航
2023-03-14

我一直坚持下去,我找到了一个适当的方法来实现这一点。虽然我没有找到转换头的方法,但可以编写一个handlerMethodArgumentResolver,允许我们在侦听器中使用自定义对象。在这段代码中,很容易将头转换为PreAuthenticatedAuthenticationToken对象,然后我可以直接在侦听器中使用该对象。

更多详细信息:https://docs.spring.io/spring-kafka/docs/2.5.3.release/reference/html/#adding-custom-handlermethodargumentresolver-to-kafkalistener

已验证正在工作。

干杯。

 类似资料:
  • 本文向大家介绍vue el-table实现自定义表头,包括了vue el-table实现自定义表头的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了vue el-table实现自定义表头的具体代码,供大家参考,具体内容如下 el-table可以通过设置 Scoped slot 来实现自定义表头。 文档说明如下: 代码实现: 页面效果如下: 以上就是本文的全部内容,希望对大家的学习有所帮

  • 问题内容: 我想实现一个自定义记录器,该记录器将所有日志条目记录到数据库中。目前,我的应用以这种方式记录日志(slf4j和log4j绑定): 我不确定如何进行。我的想法是通过实现org.slf4j.Logger接口来实现自定义日志记录绑定 下一步将是什么?我的目标是不更改当前代码 我考虑过的链接: http://www.slf4j.org/manual.html 问题答案: 它应该相当容易。您需要

  • 我正试图修改这个来自的前馈网络https://github.com/yunjey/pytorch-tutorial/blob/master/tutorials/01-basics/feedforward_neural_network/main.py 使用我自己的数据集。 我定义了一个自定义数据集,其中两个1微米数组作为输入,两个标量对应的输出: 我已更新超参数以匹配新的输入大小(2) 我还改变了t

  • 本文向大家介绍Android自定义View实现自动转圈效果,包括了Android自定义View实现自动转圈效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android实现自动转圈效果展示的具体代码,供大家参考,具体内容如下 在values文件夹下创建attrs.xml 写一个类继承view 在主页面布局中引入自定义view类 以上就是本文的全部内容,希望对大家的学习有所帮助,也

  • 我试图用Spring Cloud Stream创建一个kafka使用者,以便监听在任何Spring上下文之外构建的kafka消息,并使用自定义头(operationType)。 我使用的是Spring Boot 1.5.x/Spring Cloud egdware.sr5和1.1.1版本的kafka-client和Kafka2.11。 我的侦听器类包含此方法 而operationType标头是存在

  • 本文向大家介绍SpringMVC自定义类型转换器实现解析,包括了SpringMVC自定义类型转换器实现解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringMVC自定义类型转换器实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 页面录入的字符串:2019/12/05可以映射到实体的日期属性上,但是如果是录入2019-1