spring 与 jms、weblogic 集成,即使消息被消费到通道中,消息也会出现在队列中

spring integration with jms, weblogic, message appears in queue even after message is consumed into channel

我正在使用 spring 与 weblogic jms 的集成。我的逻辑是将 json 对象放入 jms 队列中,然后将其从队列中消耗到通道中,对其进行验证并根据特定字段对其进行路由。如果有任何错误,请进行修复并将其放回队列中。我有两个问题。 1.当消息被消耗到对象中时,我仍然可以在weblogic的管理控制台中看到该对象处于挂起状态。 2.修复验证后,如果将修改后的对象放入队列中,我将从队列中获取原始对象。

<int-jms:outbound-channel-adapter id="jmsOutbound"
    channel="requestChannel"  connection-factory="queueConnectionFactory"
    destination="inputQueue" />
<int-jms:message-driven-channel-adapter
    id="jmsInbound" connection-factory="queueConnectionFactory" 
    destination="inputQueue" channel="routingChannel" />

if (message.getHeaders().get("documentType").equals("sec"))
        routingChannels.add(outboundSecChannel);
    else if (message.getHeaders().get("documentType").equals("unds"))
        routingChannels.add(outboundFChannel);
    else if (message.getHeaders().get("documentType").equals("CH"))
        routingChannels.add(outboundAChannel);
    else{
        routingChannels.add(errorChannel);
    }

使用路由放入频道

感谢您的帮助。

我认为您应该将消费部分与生产部分区分开来。我没有告诉你必须切换到事务,但至少应该完成对已消费消息的简单确认。

既然您告诉您要将消息放回队列,那么无论错误事实如何,始终确认已使用的消息绝对是事实。所以,我的建议是在 <int-jms:message-driven-channel-adapter> 之后和 <int-jms:outbound-channel-adapter> 之前的某处放置一个 QueueChannelExecutorChannel,让他们在他们的 WebLogic JMS 中努力工作自己的线程。