Spring integration 获取soapfaultException后,Service activator未处理来自通道的消息

Spring integration 获取soapfaultException后,Service activator未处理来自通道的消息,spring-integration,Spring Integration,我正在使用JMS入站通道适配器,它正在使用来自MQ的消息并将这些消息发送到通道。此通道将此消息发送给服务激活器,SAI将解析此消息并将对象发送给WS-outbound gateway,后者将调用web服务 适配器每30秒读取50条消息,服务激活器将它们发送到WS-outbound gateway。 如果WS-call成功,则所有消息都已成功处理;如果WS-call正在发送soapFaultException,则Service activator未处理其余消息,并在下一轮(即30秒后)处理它们,但

我正在使用JMS入站通道适配器,它正在使用来自MQ的消息并将这些消息发送到通道。此通道将此消息发送给服务激活器,SAI将解析此消息并将对象发送给WS-outbound gateway,后者将调用web服务

适配器每30秒读取50条消息,服务激活器将它们发送到WS-outbound gateway。
如果WS-call成功,则所有消息都已成功处理;如果WS-call正在发送soapFaultException,则Service activator未处理其余消息,并在下一轮(即30秒后)处理它们,但不确定原因。请帮助

我只能假设一种情况:

  • 您的JMS入站通道适配器配置了
    poller
    ,用于
    max messages per poll=“0”

  • 因此,它在一个JMS事务中轮询尽可能多的消息,并将它们逐个发送到通道

  • 因为它们都是在同一个线程中处理的,所以只有在整个线程完成之后,它们才会被确认(确认、提交)到JMS中

  • 在批处理过程中至少有一个异常意味着将所有消息回滚到队列


  • 您可以使用
    taskExecutor
    并行处理它们,或者更好地切换到消息驱动的通道适配器,其中围绕一条消息的发送不会影响所有其他消息。

    谢谢Artem。您的假设是正确的。我使用的是消息驱动的通道适配器,但每15分钟后需要使用一次队列,我无法配置那个固定速率,所以可以使用消息驱动的通道适配器吗?好吧,如果您有这样的需求,我可以建议您不同的解决方案。将ExpressionEvaluationRequestHandlerAdvice放在服务激活器上,如果出现任何错误,请将message failed消息重新发送回队列。因此,任何好的消息都不会受到影响,仍然会在JMS代理上得到确认。我使用了int:aggregator,该聚合器正在将列表queueMessageList发送到我的服务激活器。在列表上迭代并通过send方法发送到通道,我将这个send方法放在try-and-catch块中,这是有效的。因此,流程类似于入站通道适配器->inputChannel->int:aggregator->RouteAgrChannel->服务激活器。此服务激活器将获取列表queueMessageListOK。那也很好。从集成的角度来看,它不是那么通用,但它是您的解决方案!我想,我们已经解决了这个问题。在我的回答中,你还需要什么才能让我接受你?