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

时间:2017-12-13 15:45:07

标签: jms spring-integration weblogic12c

我正在使用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);
    }

使用路由输入频道

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为你应该将消费部分与生产区分开来。我不是说你必须切换到事务,但至少应该完成消费消息的简单确认。

由于您告诉您要将消息重新发送回队列,因此确实始终确认消息消息与错误事实无关。所以,我建议的是在QueueChannel之后和ExecutorChannel之前的某处放置<int-jms:message-driven-channel-adapter><int-jms:outbound-channel-adapter>,以便让他们在WebLogic JMS中努力工作自己的线程。