|
该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 spring-cloud-stream 5.0.0! |
手动选择性启动Kafka Streams处理器
而上述方法则无条件适用自动启动false通过应用程序中的所有Kafka Streams处理器StreamsBuilderFactoryManager通常希望只有单独选定的Kafka Streams处理器不自动启动。
例如,假设你的应用程序中有三个不同的功能(处理器),其中一个处理器你不想在应用启动时启动它。
这里有一个类似情况的例子。
@Bean
public Function<KStream<?, ?>, KStream<?, ?>> process1() {
}
@Bean
public Consumer<KStream<?, ?>> process2() {
}
@Bean
public BiFunction<KStream<?, ?>, KTable<?, ?>, KStream<?, ?>> process3() {
}
在上述情景中,如果你设定Spring.kafka.streams.auto-startup自false那么,应用程序启动时没有处理器会自动启动。
在这种情况下,你必须按照上面描述的方式,通过调用来启动它们开始()关于标的StreamsBuilderFactoryManager.
但是,如果我们有选择性地禁用一个处理器的用例,那么你必须设置自动启动在该处理器的单独绑定上。
假设我们不想要过程3自动启动功能。
这是一艘双功能带有两个输入绑定 -process3-in-0和process3-in-1.
为了避免该处理器自动启动,你可以选择这些输入绑定并设置自动启动在他们身上。
无论你选择哪种绑定;如果你愿意,可以设置自动启动自false两个人都来,但一个就足够了。
因为它们共用同一个出厂豆,所以你不必在两个绑定上都把自动启动设置为假,但为了清晰起见,这样做可能更合理。
这里有 Spring Cloud Stream 属性,可以用来禁用该处理器的自动启动功能。
spring.cloud.stream.bindings.process3-in-0.consumer.auto-startup: false
或
spring.cloud.stream.bindings.process3-in-1.consumer.auto-startup: false
然后,你可以手动启动处理器,要么用 REST 端点,要么使用Bindings终点如下所示的API。
为此,你需要确保 Spring Boot 执行器依赖于类路径。
curl -d '{"state":"STARTED"}' -H "Content-Type: application/json" -X POST http://localhost:8080/actuator/bindings/process3-in-0
或
@Autowired
BindingsEndpoint endpoint;
@Bean
public ApplicationRunner runner() {
return args -> {
endpoint.changeState("process3-in-0", State.STARTED);
};
}
关于该机制,请参阅参考文献中的这一部分。
通过禁用绑定来控制绑定自动启动如本节所述,请注意,这仅适用于消费者装订。
换句话说,如果你使用生产者绑定,过程3出局0,虽然该生产者绑定使用相同的功能,但对关闭处理器自动启动没有任何影响StreamsBuilderFactoryBean作为消费者装订。 |