这是我们的网关配置
<int-jms:inbound-gateway
request-destination-name="co.jms.local.InternalDispatcher"
request-channel="dispatch" destination- resolver="serviceJmsDestinationResolver"
connection-factory="serviceConnectionFactory" transaction-manager="transactionManager"
receive-timeout="60000" error-channel="errorLoggingChannel" concurrent-consumers="5" />
由于网关能够处理并发客户端。一条长的处理消息不会从队列中删除,并由RedeliverMessage处理,并将其发送回队列进行处理。因此,导致了DB事务中消息和异常的重复处理。作为一个解决方法,我们试图将重新传递的延迟增加40分钟以进行重型处理,这似乎在起作用,但我发现这种解决方法并没有非常积极。有人可以建议应该解决什么。春季融合-JMS.4.1.0/4.1.1具有相同的结果。
我不知道您正在谈论的是什么"重新传递延迟",但我严重怀疑WebSphere MQ会重新计算一条过程中的消息。我最好的猜测是一些网络小故障导致会话结束(需要消息),这使其成为重新交付的候选人。
正如我在评论中所说的那样,在很长的持续时间内掌握了一条未添加的信息只是在问麻烦。
您应该提出其他一些体系结构,以便您可以在相当短的时间内添加消息(例如将其移至过程中的DB表或类似)。或者,也许消息传递不是解决您问题的正确解决方案。