簡體   English   中英

Spring與Java Dsl集成中的ErrorHandling

[英]ErrorHandling in Spring Integration with Java Dsl

我想知道在SI Java Dsl中使用serviceActivators來處理錯誤的正確方法是什么。 我有這樣的Spring Integration xml配置:

<jms:message-driven-channel-adapter id="messageIn" auto-startup="false"
                                    container="messageNotificationJms" channel="messageChannel"
                                    error-channel="customErrorChannel"/>

<channel id="messageChannel"/>

<chain input-channel="messageChannel">
    <!-- some logic and service-activator -->
</chain>

<channel id="customErrorChannelTpm"/>

<chain input-channel="customErrorChannel" output-channel="nullChannel">
    <service-activator ref="errorService" method="stopEndpoints" />
</chain>

但現在,我正在嘗試使用SI Java DSL配置此上下文,因此我創建了這樣的配置

@Configuration
@EnableIntegration
public class SIConfig {

    @Autowired
    AbstractMessageListenerContainer messageNotificationJms;

    @Autowired
    ErrorService errorService;

    @Bean
    public MessageChannel messageChannel() {
        return MessageChannels.direct("messageChannel").get();
    }

    @Bean
    public MessageChannel customErrorChannel() {
        return MessageChannels.direct("customErrorChannel").get();
    }

    @Bean
    public JmsMessageDrivenChannelAdapter messageIn() {
        return Jms.messageDriverChannelAdapter(messageNotificationJms)
                .id("messageIn")
                .autoStartup(false)
                .outputChannel(messageChannel())
                .errorChannel(customErrorChannel())
                .get();
    }


    @Bean
    public IntegrationFlow customErrorFlow() {
        return IntegrationFlows.from(customErrorChannel())
            //.handle () ?????????????????????????
        .get();
    }

    @Bean
    public IntegrationFlow messageFlow() {
        //some logic
    }

}

作為句柄方法參數,我試圖使用像這樣的lambda表達式

 .handle(message -> errorService.stopEndpoints(message))

但由於參數類型和返回類型,存在編譯錯誤。

我有一個沒有編譯錯誤的非顯而易見的變種,但我不確定它是否能在環境中正常工作。 這是正確的嗎?:

  .<ErrorMessage>handle((payload, headers) -> {
     errorService.stopEndpoints(payload);
     return null;
})

另外,我的ErrorHandler類。

@Component
public class ErrorService implements ErrorHandler {

    @Override
    public void handleError(Throwable t) {
        stopEndpoints(t);
    }

    public void stopEndpoints(ErrorMessage errorMessage) {
        Throwable throwable = errorMessage.getPayload();
        stopEndpoints(throwable);

    }

    private void stopEndpoints(Throwable t) {
        //stoppingEndpoints
    }

}

編輯:我使用Spring Framework 4.1.6,Spring Integration 4.1.3和SI Java DSL 1.0.1

您可以使用handle(String beanName, String methodName)變量:

handle("errorService", "stopEndpoints");

要么

handle("errorService", "handleError");

在第二種情況下,框架將負責解開有效載荷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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