我使用了publishSubscribeChannel并添加了taskExecutor来实现异步。
下面是代码。
@Bean
public IntegrationFlow mainFlow(){
return IntegrationFlows.from("mainFlow")
..
.publishSubscribeChannel(subFlowTaskExecutor, subscribe->{
subscribe.subscribe(flow->
flow.channel("testFlow")); })
..
.enrichHeaders(c->c.header(HttpHeaders.STATUS_CODE,HttpStatus.OK))
.get();
}
@Bean
public IntegrationFlow testFlow (){
return IntegrationFlows.from("testFlow")
.handler(handlerSomeThing())
.get();
}
如您所见,mainFlow为testFlow。 现在,我想实现一个errorChannel来处理testFlow异常。 那么什么是好的方法呢?
我试图使用这种方式,实现一个ErrorHandler并设置为subscription。但是还有其他方法吗?
private TestErrorHandler errorHandler;
@Bean
public IntegrationFlow mainFlow(){
return IntegrationFlows.from("mainFlow")
..
.publishSubscribeChannel(subFlowTaskExecutor, subscribe->{
subscribe.errorHandler(errorHandler);
subscribe.subscribe(flow->
flow.channel("testFlow")); })
..
.enrichHeaders(c->c.header(HttpHeaders.STATUS_CODE,HttpStatus.OK))
.get();
}
@Component
公共类TestErrorHandler实现ErrorHandler {
@Autowired
private MessagingTemplate messagingTemplate;
@Autowired
@Qualifier(RTSChannel.PerformNameScreening.ERROR_CHANNEL)
private MessageChannel errorChannel;
@Override
public void handleError(Throwable throwable) {
messagingTemplate.send(errorChannel,new ErrorMessage(throwable));
}
@Bean
public MessagingTemplate errorMessagingTemplate(){
return new MessagingTemplate();
}
}
答案 0 :(得分:0)
@Bean
public IntegrationFlow mainFlow(){
return IntegrationFlows.from("mainFlow")
您不能拥有与流中第一个频道同名的流。假设你的意思
@Bean
public IntegrationFlow mainFlow(){
return IntegrationFlows.from("mainFlowChannel")
通常,错误通道将位于mainFlowChannel
上游的某个组件上。
如果要在子流中确定错误处理的范围,则需要在其中使用.gateway()
。
.publishSubscribeChannel(subFlowTaskExecutor, subscribe-> flow->
flow.gateway(testFlow(), g -> g.errorChannel("errorFlowInputChannel)))