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

spring与jms、weblogic的集成,即使消息被消费到通道中,消息也会出现在队列中,jms,spring-integration,weblogic12c,Jms,Spring Integration,Weblogic12c,我正在使用spring与WebLogicJMS的集成。我的逻辑是将json对象放在jms队列中,并将其从队列消费到通道中,验证它并基于特定字段路由它。如果有任何错误,请进行修复并将其放回队列。我有两个问题。1.当消息被消费到对象中时,我仍然可以在weblogic的管理控制台中将该对象视为挂起。2.修复验证后,如果将修改后的对象放入队列中,我将从队列中获取原始对象 <int-jms:outbound-channel-adapter id="jmsOutbound" channel="

我正在使用spring与WebLogicJMS的集成。我的逻辑是将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);
    }

if(message.getHeaders().get(“documentType”).equals(“sec”))
RoutingChannel.add(outboundSecChannel);
else if(message.getHeaders().get(“documentType”).equals(“unds”))
RoutingChannel.add(outboundFChannel);
else if(message.getHeaders().get(“documentType”).equals(“CH”))
routingChannels.add(outboundAChannel);
否则{
路由通道。添加(错误通道);
}
使用路由输入通道


谢谢您的帮助。

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


因为您告诉我们您将把消息放回队列,所以始终独立于错误事实来确认已使用的消息肯定是事实。因此,我建议将
队列通道
执行器通道
放置在
之后和
之前的某个位置,让他们在自己的线程中使用WebLogic JMS完成他们的艰苦工作。

谢谢@Artem,这满足了我的需要。我将修改后的消息作为新消息放置。