全局错误频道无效

时间:2017-03-23 15:26:57

标签: java spring spring-integration

嘿所以我试图在Spring集成java dsl中使用全局错误通道,它似乎没有工作。

我尝试了一个带有网关的小样本,我传递了一个字符串,句柄只是错误输出:

@MessagingGateway
public interface SampleGateway {

    @Gateway(requestChannel="flow.input", replyTimeout=100000)
    public String upperCaseMe(Object input);

}

@Bean
public IntegrationFlow flow() {
    return new IntegrationFlow() {
        @Override
        public void configure(IntegrationFlowDefinition<?> flow) {
            flow.handle(new GenericHandler<Object>() {
                @Override
                public Object handle(Object payload, Map<String, Object> headers) {
                    throw new RuntimeException("boom");
                }
            });
        }
    };
}

然后我制作了一个流程来捕捉所有错误,如果它到达那里就打印出来:

@Bean
public IntegrationFlow errorFlow() {
    return  IntegrationFlows
                .from("errorChannel")
                .handle(new MessageHandler() {
                    @Override
                    public void handleMessage(Message<?> arg0) throws MessagingException {
                        System.out.println("Worked");
                    }
                })
                .get();
}

但是当我运行程序时,控件永远不会达到错误流程。错误只是一直回到网关并打印堆栈跟踪。

我尝试明确创建errorChannel,但即使这似乎没有什么区别。

我在这里遗漏了什么吗?或者我必须为java dsl配置不同的方法吗?

感谢帮助。

1 个答案:

答案 0 :(得分:0)

您必须将错误通道添加到网关才能启用它。 errorChannel = "errorChannel"上的@MessagingGateway

参见javadocs ......

/**
 * Identifies a channel that error messages will be sent to if a failure occurs in the
 * gateway's proxy invocation. If no {@code errorChannel} reference is provided, the gateway will
 * propagate {@code Exception}s to the caller. To completely suppress {@code Exception}s, provide a
 * reference to the {@code nullChannel} here.
 * @return the suggested channel name, if any
 */
String errorChannel() default "";