【问题标题】:spring cloud stream SOURCE with key,value type of message带有键值类型消息的spring cloud stream SOURCE
【发布时间】:2020-06-01 15:29:13
【问题描述】:

我试图使用弹簧云流发送带有键值对的消息。我找不到任何 API。 org.springframework.messaging.MessageChannel 仅将有效负载作为发送功能的一部分。使用 Kafka 模板可以实现这一点。这是产生键值类型消息的唯一方法吗?由于 KafkaTemplate 是 apache kafka 的 spring 的一部分,我希望在 spring 云流中有一个抽象可用。请建议。

谢谢,

【问题讨论】:

    标签: spring spring-kafka spring-cloud-stream kafka-producer-api


    【解决方案1】:

    出于您的问题的目的,您可以将 spring-cloud-stream 视为对更低级别 API 的更高级别抽象,例如 spring-kafka(如果使用 kafka binder)、spring-integration 等。换句话说,您不不需要在框架范围内显式发送或接收任何内容。它将为您完成发送和接收;这是该框架的核心功能 - 将代码的执行绑定到代理管理的输入和输出目的地。 您需要为您的案例做的就是生成一个Message。例如,这是一个功能齐全的应用程序

    @SpringBootApplication
    public static class SupplierConfiguration {
    
        @Bean
        public Supplier<String> stringSupplier() {
            return () -> "Hello from Supplier";
        }
    }
    

    虽然您所做的只是生成一个字符串,但框架会将其包装到 Message 中并将其发送到 Kafka(假设您使用的是 Kafka binder)。 如果您需要显式控制键的值,您可以返回带有kafka_messageKey 设置的消息的实际实例。例如;

    @SpringBootApplication
    public static class SupplierConfiguration {
    
        @Bean
        public Supplier<Message<?>> stringSupplier() {
            return () -> MessageBuilder.withPayload("Hello from Supplier")
                       .setHeader(KafkaHeaders.MESSAGE_KEY, "blah")
                       .build();
        }
    }
    

    您可以阅读更多关于它的信息here

    另外,请注意,我们正在从基于注释的编程模型转向更简单的函数模型。

    【讨论】:

    • 感谢您的意见。只是为了确认 KafkaHeaders.MESSAGE_KEY 与 KAFKATemplate 中的 KEY 相同?我需要根据这个键加入两个 KTable。请确认。我也使用相同的代码来生成消息。一旦我添加了 KafkaHeaders.MESSAGE_KEY ,消息就不再作为 JSON 生成。它以字节的形式生成。我正在使用 setHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON)。
    • 我不明白的是如何调用供应商发送消息?
    • 当我需要从应用程序的某处生成消息时,它的 Stream FP API 与流兼容?例如我注册用户并发送 UserRegistered 消息?我在文档中找不到它。使用旧版 API,可以通过 MessageChannel
    • 可悲的是,我怀疑您可能没有像我在上一条评论中链接到的文档中看到的那样。但这里是具体部分 - cloud.spring.io/spring-cloud-static/spring-cloud-stream/…
    猜你喜欢
    • 1970-01-01
    • 2020-09-28
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2018-08-29
    相关资源
    最近更新 更多