![](/img/trans.png)
[英]How to configure the bindings of a function in Spring Cloud Stream to bind its input to a web endpoint and its output to a Kafka topic
[英]How to configure an UncaughtExceptionHandler in Spring Kafka Stream
我正在使用spring-kafka
來實現使用 Spring Boot 1.5.16 的流應用程序。 我們使用的spring-kafka
版本是 1.3.8.RELEASE。
我正在尋找一種方法來關閉啟動應用程序,以防出現錯誤,終止與 Kafka Streams 相關的所有線程。 我發現在KafkaStreams
內部有可能為未捕獲的異常注冊一個句柄。 該方法是setGlobalStateRestoreListener
。
我看到這個方法在spring-kafka
中暴露在KStreamBuilderFactoryBean
類型中。
我的問題如下。 有沒有一種簡單的方法可以將UncaughtExceptionHandler
注冊為 bean 並讓 Spring 正確地注入到工廠 bean 中? 或者我應該自己創建KStreamBuilderFactoryBean
並手動設置處理程序?
@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_KSTREAM_BUILDER_BEAN_NAME)
public KStreamBuilderFactoryBean kStreamBuilderFactoryBean(StreamsConfig streamsConfig) {
final KStreamBuilderFactoryBean streamBuilderFactoryBean = new KStreamBuilderFactoryBean(
streamsConfig);
streamBuilderFactoryBean.setUncaughtExceptionHandler((threadInError, exception) -> {
// Something happens here
});
return streamBuilderFactoryBean;
}
非常感謝。
是的。 在那個舊版本中,您必須自己指定一個KStreamBuilderFactoryBean
bean,並使用適當的注入和KafkaStreamsDefaultConfiguration.DEFAULT_KSTREAM_BUILDER_BEAN_NAME
。
在以后的版本中,我們已經有一個StreamsBuilderFactoryBeanConfigurer
來保留自動配置的KStreamBuilderFactoryBean
,但能夠以任何我們需要的方式修改它。
更新
您只需在應用程序上下文中將其創建為一個 bean,框架就會將其提取到StreamsBuilderFactoryBean
:
@Bean
StreamsBuilderFactoryBeanConfigurer streamsCustomizer() {
return new StreamsBuilderFactoryBeanConfigurer() {
@Override
public void configure(StreamsBuilderFactoryBean factoryBean) {
factoryBean.setCloseTimeout(...);
}
@Override
public int getOrder() {
return Integer.MAX_VALUE;
}
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.