带有键值类型消息的 spring 云流 SOURCE

San*_*jay 2 spring kafka-producer-api spring-cloud-stream spring-kafka

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

谢谢,

Ole*_*sky 5

出于您的问题的目的,您可以将 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";
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然您所做的只是生成一个字符串,但框架会将其包装到 Message 并将其发送到 Kafka(前提是您使用的是 Kafka binder)。如果需要明确控制键的值,可以使用kafka_messageKeyset返回 Message 的实际实例。例如;

@SpringBootApplication
public static class SupplierConfiguration {

    @Bean
    public Supplier<Message<?>> stringSupplier() {
        return () -> MessageBuilder.withPayload("Hello from Supplier")
                   .setHeader(KafkaHeaders.MESSAGE_KEY, "blah")
                   .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多关于它的信息

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