簡體   English   中英

如何使用 Spring Cloud Stream Supplier 向 Kafka 發送密鑰消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM