Spring boot 如何使用Spring Cloud Stream向Kafka发送关键消息

Spring boot 如何使用Spring Cloud Stream向Kafka发送关键消息,spring-boot,spring-kafka,spring-cloud-stream,Spring Boot,Spring Kafka,Spring Cloud Stream,我想使用SpringCloudStream向Kafka生成键控(带有特定键的消息)消息 @SpringBootApplication public class SpringCloudStreamKafkaApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudStreamKafkaApplication.class, args); } @Bean S

我想使用SpringCloudStream向Kafka生成键控(带有特定键的消息)消息

@SpringBootApplication
public class SpringCloudStreamKafkaApplication {

  public static void main(String[] args) {
    SpringApplication.run(SpringCloudStreamKafkaApplication.class, args);
  }

  @Bean
  Supplier<DataRecord> process(){
    return () -> new DataRecord(42L);
  }

}
@springboot应用程序
公共类SpringCloudStreamKafkaApplication{
公共静态void main(字符串[]args){
run(SpringCloudStreamKafkaApplication.class,args);
}
@豆子
供应商流程(){
return()->新数据记录(42L);
}
}
我需要在供应商代码中更改什么才能提供密钥? 在新样式的API(使用lambdas)中是否可能

谢谢

返回
消息
并设置
卡夫卡标题。消息\u键
标题:

@Bean
Supplier<Message<String>> process() {
    return () -> MessageBuilder.withPayload("foo")
            .setHeader(KafkaHeaders.MESSAGE_KEY, "bar".getBytes())
            .build();
}
@Bean
供应商流程(){
return()->MessageBuilder.withPayload(“foo”)
.setHeader(KafkaHeaders.MESSAGE_键,“bar”.getBytes())
.build();
}
(假定为默认密钥序列化程序(字节[])

编辑

这将被称为无休止

如果你想发送一个有限的流,我相信你必须切换到反应模式

@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);
    };
}
@Bean
供应商流程有限(){
Message msg1=MessageBuilder.withPayload(“foo”)
.setHeader(KafkaHeaders.MESSAGE_键,“bar”.getBytes())
.build();
Message msg2=MessageBuilder.withPayload(“baz”)
.setHeader(KafkaHeaders.MESSAGE_键,“qux”.getBytes())
.build();
返回()->{
返回通量.just(msg1,msg2);
};
}
还有
Flux.fromStream(myStream)


这将在流程的末尾结束。

Gary,感谢您的回复。我能够从“它不工作”阶段过渡到“它不停止工作”阶段:)有没有办法创建一个一次性供应商(想想在启动期间生成数据并存在的加载程序)。我怎么能做到呢?嗨,维克多,我不是反应空间方面的专家,但是,据我所说,看起来你必须切换到反应模型;请参阅对我的答案的编辑。