Spring integration Spring集成队列错误处理
我有一个springintegrationdsl流,它从restapi中提取数据,转换数据并将其发送到另一个restapi 获取数据后,它会将一条消息发送到队列通道中,队列通道将完成其余的处理。当队列工作时,原始线程将运行并获取更多数据 我遇到的问题是,在队列处理完所有数据之前,不会处理从队列抛出的任何错误,但我希望它停止处理并立即抛出错误,因为整个过程可能需要很长时间,但我希望它在发现第一个错误时停止 网关:Spring integration Spring集成队列错误处理,spring-integration,Spring Integration,我有一个springintegrationdsl流,它从restapi中提取数据,转换数据并将其发送到另一个restapi 获取数据后,它会将一条消息发送到队列通道中,队列通道将完成其余的处理。当队列工作时,原始线程将运行并获取更多数据 我遇到的问题是,在队列处理完所有数据之前,不会处理从队列抛出的任何错误,但我希望它停止处理并立即抛出错误,因为整个过程可能需要很长时间,但我希望它在发现第一个错误时停止 网关: @MessagingGateway(errorChannel = "syncErro
@MessagingGateway(errorChannel = "syncErrorChannel")
@Service
public interface CrmGateway {
@Gateway(requestChannel = "departmentSyncInput", replyChannel = "departmentSyncOutput")
@Payload("new String()")
Object syncDepartments();
}
流量:
错误处理程序:
@Bean
IntegrationFlow errorHandler() {
return IntegrationFlows
.from("syncErrorChannel")
.handle(Exception.class, (payload, headers) -> {
payload.printStackTrace();
return payload;
})
.get();
}
我还尝试使用IntegrationFlows.from(“errorChannel”)
获得相同的结果
我也尝试过使用Future
,它的行为与此相同,因此当我调用get()
时,我会得到错误,但最后仍然会出现这种情况
谢谢您的帮助。您的流中没有
队列
通道定义,但我猜您的意思是.channel(c->c.executor())
。如果你也分享这件事的日志会更好
我能说的是,在网关的情况下,您尝试覆盖errorChannel
头,它是TemporaryReplyChannel
因此,错误被发送到网关进程,并在拆分时使其崩溃
我建议您尝试使用h.header(“errorChannel”,“syncErrorChannel”,true)
来真正覆盖该header。谢谢,似乎已经完成了。使用c->c.executor()
与队列不同吗?这是我从XML转换而来的DSL,但我以前没有使用过SI DSL。从很大程度上说,它实际上是队列,因为您向executor提供了一个任务,如果没有空闲线程来处理,它会将任务存储在内部队列中。我说的是用于轮询特定行为的QueueChannel
@Bean
IntegrationFlow errorHandler() {
return IntegrationFlows
.from("syncErrorChannel")
.handle(Exception.class, (payload, headers) -> {
payload.printStackTrace();
return payload;
})
.get();
}