Spring integration Spring集成队列错误处理

Spring integration Spring集成队列错误处理,spring-integration,Spring Integration,我有一个springintegrationdsl流,它从restapi中提取数据,转换数据并将其发送到另一个restapi 获取数据后,它会将一条消息发送到队列通道中,队列通道将完成其余的处理。当队列工作时,原始线程将运行并获取更多数据 我遇到的问题是,在队列处理完所有数据之前,不会处理从队列抛出的任何错误,但我希望它停止处理并立即抛出错误,因为整个过程可能需要很长时间,但我希望它在发现第一个错误时停止 网关: @MessagingGateway(errorChannel = "syncErro

我有一个springintegrationdsl流,它从restapi中提取数据,转换数据并将其发送到另一个restapi

获取数据后,它会将一条消息发送到队列通道中,队列通道将完成其余的处理。当队列工作时,原始线程将运行并获取更多数据

我遇到的问题是,在队列处理完所有数据之前,不会处理从队列抛出的任何错误,但我希望它停止处理并立即抛出错误,因为整个过程可能需要很长时间,但我希望它在发现第一个错误时停止

网关:

@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();
  }