【问题标题】:spring integration with jms, weblogic, message appears in queue even after message is consumed into channel与jms,weblogic的spring集成,即使在消息被消费到通道之后,消息也会出现在队列中
【发布时间】:2018-05-27 13:56:33
【问题描述】:

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

使用路由加入频道

感谢您的帮助。

【问题讨论】:

    标签: jms spring-integration weblogic12c


    【解决方案1】:

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

    既然您告诉您要将消息放回队列,那肯定是始终独立于错误事实来确认已消费消息的事实。所以,我的建议是在&lt;int-jms:message-driven-channel-adapter&gt; 之后和&lt;int-jms:outbound-channel-adapter&gt; 之前的某个位置放置一个QueueChannelExecutorChannel,让他们在自己的线程中使用WebLogic JMS 进行艰苦的工作。

    【讨论】:

    • 谢谢@Artem,这满足了我的需要。我把修改后的消息作为新消息。
    猜你喜欢
    • 2016-06-02
    • 2013-08-08
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2021-05-23
    • 2015-09-19
    • 1970-01-01
    相关资源
    最近更新 更多