[英]How to send keyed message to Kafka using Spring Cloud Stream Supplier
我想使用 Spring Cloud Stream 向 Kafka 生成鍵控(具有特定鍵的消息)消息。
@SpringBootApplication
public class SpringCloudStreamKafkaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudStreamKafkaApplication.class, args);
}
@Bean
Supplier<DataRecord> process(){
return () -> new DataRecord(42L);
}
}
我需要在供應商代碼中更改什么才能提供密鑰? 是否可以使用新的 API 樣式(使用 lambdas)?
謝謝
返回Message<?>
並設置KafkaHeaders.MESSAGE_KEY
標頭:
@Bean
Supplier<Message<String>> process() {
return () -> MessageBuilder.withPayload("foo")
.setHeader(KafkaHeaders.MESSAGE_KEY, "bar".getBytes())
.build();
}
(假設默認密鑰序列化程序 (byte[])。
編輯
這將被無休止地調用。
如果你想發送一個有限的流,我相信你必須切換到反應模型。
@Bean
Supplier<Flux<Message<String>>> processFinite() {
Message<String> msg1 = MessageBuilder.withPayload("foo")
.setHeader(KafkaHeaders.MESSAGE_KEY, "bar".getBytes())
.build();
Message<String> msg2 = MessageBuilder.withPayload("baz")
.setHeader(KafkaHeaders.MESSAGE_KEY, "qux".getBytes())
.build();
return () -> {
return Flux.just(msg1, msg2);
};
}
還有Flux.fromStream(myStream)
。
這將在流的末尾結束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.