【问题标题】:Configure interval based cron in Spring JMS integration在 Spring JMS 集成中配置基于间隔的 cron
【发布时间】:2012-02-24 16:42:54
【问题描述】:

我需要在指定的时间间隔内将消息从 Queue1 转发到 Queue2,而不是在消息到达 Queue1 之后。下面是我的配置。

<int-jms:inbound-channel-adapter  id="inboundChannelAdapterId" connection-factory="connFactory" destination="jmsQueue1" channel="queueChannel" >
    <int:poller send-timeout="2000" >
        <!--
        <int:interval-trigger initial-delay="60000" interval="60000"
        fixed-rate="true"/>
        -->
        <int:cron-trigger expression="0 0/1 * * * ?" />
    </int:poller>
</int-jms:inbound-channel-adapter>

<int-jms:outbound-channel-adapter channel="queueChannel" connection-factory="connFactory" destination="jmsQueue2" >
</int-jms:outbound-channel-adapter>

<int:channel id="queueChannel" />

上面的xml配置直接将消息从Queue1转发到Queue2,不考虑配置。我已经尝试过基于间隔和基于 cron 的解决方案,它们似乎工作相似(立即将消息从 Queue1 传递到 Queue2)。这里的“poller”配置有什么问题吗?任何帮助将不胜感激。

【问题讨论】:

    标签: spring jms integration spring-integration poller


    【解决方案1】:

    您需要在适配器上设置接收超时。否则它会阻塞在receive()上并立即得到消息。

    编辑:请参阅下面的 cmets - 从 2.0.4 开始,默认情况下轮询队列的线程不再阻塞。

    您可能还想考虑为您的轮询器使用 2.0+ 语法;您当前的语法在 2.0 中已弃用,在 2.1 中不允许...

    <jms:inbound-channel-adapter id="in" channel="jmsinToStdoutChannel" destination="requestQueue">
        <poller fixed-delay="30000"/>
    </jms:inbound-channel-adapter>
    

    澄清一下...如果在适配器上设置了接收超时,轮询线程将阻塞那么长时间或直到消息到达。这可能会使轮询器看起来没有遵守其时间表。默认(从 2.0.4 开始)是不阻塞,这意味着消息只会在轮询器的时间表上接收。

    【讨论】:

    • 感谢您的回复。我试过你的建议,并没有解决问题。当我再次通过文档@@link 时,它告诉我基于队列的适配器不支持此功能,因为它们的接收没有被阻塞等待? 另一方面,当使用 Spring Integration 自己的基于队列的通道时,超时值确实有机会参与。以下示例演示了轮询消费者如何几乎立即收到消息。 您以前尝试过吗?再次感谢!
    • 您使用的是什么版本的 Spring Integration? 2.0.4 中的行为已更改为默认不进行阻塞调用。 github.com/garyrussell/spring-integration/commit/…
    • 当前2.0.x版本为2.0.5;但 2.1.0 也可用。
    • 是的,我能够通过回滚到 2.0.3 来重现您的问题。在 2.0.5 和 2.1.0 中一切正常 - 您无需添加接收超时来阻止线程在接收()上阻塞。
    • 对不起。否决票是我的意外点击,除非编辑答案,否则我现在无法撤消。
    猜你喜欢
    • 1970-01-01
    • 2012-06-14
    • 2014-05-06
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2012-03-19
    • 2014-08-23
    • 2013-01-06
    相关资源
    最近更新 更多