Java Spring Cloud Stream应用程序在供应商完成之前退出

Java Spring Cloud Stream应用程序在供应商完成之前退出,java,spring-boot,apache-kafka,spring-cloud-stream,reactor,Java,Spring Boot,Apache Kafka,Spring Cloud Stream,Reactor,我有一个短期的“任务”应用程序,它根据数据库中的状态向卡夫卡生成消息。我正在使用SpringCloudStream以我的应用程序的以下格式生成消息。我从开始就遵循这种格式将任意数据发送到输出绑定 private EmitterProcessor<Message<GenericRecord>> processor; 应用程序运行、创建记录、运行onNext(),然后退出。然后我查看是否有任何消息已发布,但没有关于该主题的消息。然后,在每条消息生成之后,我添加了一个线程。s

我有一个短期的“任务”应用程序,它根据数据库中的状态向卡夫卡生成消息。我正在使用SpringCloudStream以我的应用程序的以下格式生成消息。我从开始就遵循这种格式将任意数据发送到输出绑定

private EmitterProcessor<Message<GenericRecord>> processor;
应用程序运行、创建记录、运行onNext(),然后退出。然后我查看是否有任何消息已发布,但没有关于该主题的消息。然后,在每条消息生成之后,我添加了一个
线程。sleep(10000)
,消息以主题结束


在查看了反应堆的文档后,我没有看到任何明确的方法来实现这一点。是否有办法等待EmitterProcessor在Spring应用程序退出之前完成消息发布?

您是否有使用
EmitterProcessor
的特定原因?我认为这个用例可以通过使用
StreamBridge
来解决。例如

@Autowired StreamBridge streamBridge;


@Override
public void run(ApplicationArguments arg0) {
    // ... create Message<GenericRecord> producerRecord
    this.streamBridge.send("process-out-0", producerRecord);
}
@autowiredstreambridge-StreamBridge;
@凌驾
公共作废运行(应用程序参数arg0){
//…创建消息生成记录
这个.streamBridge.send(“process-out-0”,producerRecord);
}
然后提供配置:
spring.cloud.stream.source:process

您可以在ref文档中找到有关
StreamBridge
的更多详细信息。

我曾尝试使用StreamBridge,但在使用Avro和it时遇到问题。应用程序将消息发送到多个动态目的地,我们在构建消息时自己进行Avro转换。使用converter with ContentType的StreamBridge不允许我们发送已经有效的Avro对象,并且会引发错误。如果出现这种情况,请随意分享一个小示例应用程序?我目前没有使用StreamBridge的实现,但这会遇到同样的问题。您好,启用本机编码时,StreamBridge API有一个小问题。这在最新的快照中得到了解决。有关将StreamBridge与avro和本机编码结合使用的一些示例,请参见此示例:
@Bean
public Supplier<Flux<Message<GenericRecord>>> supplier() {
    return () -> this.processor;
}
public static void main(String[] args) {
    ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
    ctx.close();
}
@Autowired StreamBridge streamBridge;


@Override
public void run(ApplicationArguments arg0) {
    // ... create Message<GenericRecord> producerRecord
    this.streamBridge.send("process-out-0", producerRecord);
}