簡體   English   中英

如何在 Spring Kafka Stream 中配置 UncaughtExceptionHandler

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM