我正在尝试使用 spring cloud stream 发送带有键值对的消息。我找不到任何 API。 org.springframework.messaging.MessageChannel 只有有效负载作为发送功能的一部分。使用 Kafka 模板可以实现这一点。这是产生键值类型消息的唯一方法吗?由于 KafkaTemplate 是 apache kafka spring 的一部分,我希望在 spring cloud stream 中有一个抽象可用。请建议。
谢谢,
最佳答案
为了您的问题的目的,您可以将 spring-cloud-stream 视为对更多低级 API 的更高级别抽象,例如 spring-kafka(如果使用 kafka binder),spring-integration 等。换句话说,您不' 需要在框架范围内明确发送或接收任何内容。它将为您发送和接收;这是框架的核心功能 - 将代码的执行绑定(bind)到由代理管理的输入和输出目的地。
您需要为您的案例做的就是生成一个 Message
。例如,这是一个功能齐全的应用程序
@SpringBootApplication
public static class SupplierConfiguration {
@Bean
public Supplier<String> stringSupplier() {
return () -> "Hello from Supplier";
}
}
虽然您所做的只是生成一个 String,但框架会将其包装到 Message 中并将其发送到 Kafka(前提是您使用的是 Kafka binder)。
如果您需要显式控制键的值,您可以返回一个设置了 kafka_messageKey
的 Message 的实际实例。例如;
@SpringBootApplication
public static class SupplierConfiguration {
@Bean
public Supplier<Message<?>> stringSupplier() {
return () -> MessageBuilder.withPayload("Hello from Supplier")
.setHeader(KafkaHeaders.MESSAGE_KEY, "blah")
.build();
}
}
您可以阅读更多相关信息 here
另外,请注意我们正在从基于注解的编程模型转移到一个更简单的函数模型。
关于带有键,值类型消息的spring cloud stream SOURCE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60266852/