嘿所以我试图在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配置不同的方法吗?
感谢帮助。
答案 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 "";