![](/img/trans.png)
[英]How can I pause (turn on/off) stream processing w/ Spring Cloud Stream & Kafka Streams Binder?
[英]How do I produce just one message using Spring Cloud Stream w/o deprecated @Output, or turn off polling?
我正在尝试使用 Spring Cloud仅向 Kafka 发布一条消息,而没有任何弃用的类/方法或注释。 我还希望能够轻松更改有效负载。
因此,为了清楚起见,我试图不使用已弃用的@Output
注释,也不使用任何KafkaTemplate
。
我的配置:
spring:
cloud:
stream:
bindings:
message-out-0:
destination: ${spring.application.name}
producer:
key:
serializer:
type: string
format: utf-8
charset: utf-8
value:
serializer:
type: string
format: utf-8
charset: utf-8
我的代码 - 到目前为止我尝试过的:
@Component
@RequiredArgsConstructor
public class ApplicationAnnouncer implements CommandLineRunner {
private final MessageService messageService;
@Override
public void run(String... args) throws Exception {
messageService.value = "Application started...";
messageService.message();
}
}
一种尝试:
@Configuration
public class MessageService {
public Object value;
@Bean
public Supplier<Message<?>> message () {
return () -> MessageBuilder.withPayload(value).build();
}
}
另一种尝试:
@Configuration
public class MessageService {
public Object value;
@Bean
public Supplier<Flux<?>> message () {
return () -> Flux.fromStream(Stream.generate(() -> {
try {
Thread.sleep(1000);
return value;
} catch (Exception e) {
// ignore
}
return null;
})).subscribeOn(Schedulers.elastic()).share();
}
}
两次尝试在控制台使用者中的输出:
Hello World!
Hello World!
Hello World!
Hello World! // ... Repeated every second
该文件指出:
该框架提供了一个默认的轮询机制(回答“谁?”的问题),它将触发供应商的调用,并且默认情况下它会每秒执行一次(回答“多久?”的问题)。
但是如果我不希望它每秒轮询一次呢?
我向 MessageService 提供消息的方式很奇怪......它是配置吗? 或者它是一种服务?
我还没有找到将ONE CUSTOMIZABLE MESSAGE推送到 Kafka 的最基本示例。
您可以使用StreamBridge来访问云流绑定:
@Component
@RequiredArgsConstructor
public class ApplicationAnnouncer implements CommandLineRunner {
private final StreamBridge streamBridge;
@Override
public void run(String... args) throws Exception {
streamBridge.send("message-out-0", "Application started...");
}
}
第一个字符串是从提供函数的 bean 派生的应用程序设置中提供的绑定名称。
您甚至不需要从中派生绑定名称的实际 bean。 在这种情况下,任何名称都可以。
您可以在此处找到一些示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.