我正在使用JMS入站通道适配器,它使用来自MQ的消息并将这些消息发送到通道 . 此通道将此消息发送到服务激活器,并且SA解析此消息并将对象发送到将调用Web服务的WS出站网关 .
适配器每30秒读取50条消息,服务激活器将它们发送到WS出站网关 . 如果WS调用成功,则所有消息都处理成功,如果WS正在发送soapFaultException,那么服务激活器不处理其余消息并在下一轮处理它们,即30秒后,不确定原因 . 请帮忙
我只能假设一种情况:
您的JMS入站通道适配器配置了 poller ,用于 max-messages-per-poll="0"
poller
max-messages-per-poll="0"
因此,它在一个JMS事务中轮询尽可能多的消息,并将它们逐个发送到通道 .
由于所有这些都在同一个线程中处理,因此只有在整个群集之后才会将它们确认(确认,提交)到JMS中 .
在批处理过程中至少有一个例外意味着将所有消息回滚到队列 .
您可以使用 taskExecutor 并行处理它们,甚至可以更好地切换到消息驱动通道适配器,其中一条消息周围的TX不会影响所有其他消息 .
taskExecutor
1 回答
我只能假设一种情况:
您的JMS入站通道适配器配置了
poller
,用于max-messages-per-poll="0"
因此,它在一个JMS事务中轮询尽可能多的消息,并将它们逐个发送到通道 .
由于所有这些都在同一个线程中处理,因此只有在整个群集之后才会将它们确认(确认,提交)到JMS中 .
在批处理过程中至少有一个例外意味着将所有消息回滚到队列 .
您可以使用
taskExecutor
并行处理它们,甚至可以更好地切换到消息驱动通道适配器,其中一条消息周围的TX不会影响所有其他消息 .