Apache Camel。节流部分路线

时间:2016-08-09 13:10:12

标签: java apache-camel jms throttling

我有一个JMS队列。收到消息后,需要将其存储到DB。然后,根据某些条件,我希望以固定费率将此消息发送给第三方服务,因此我使用限制。

我有以下路线:

    from("jms:queue")
            .bean(persistingListener)
            .choice()
                .when(some condition ..)
                    .throttle(5)
                    .asyncDelayed()
                    .bean(thirdPartyServiceClient)
            .endChoice();

但是,整个路由受到限制,而不是与第三方服务客户端相关的部分。我的意思是,如果我在队列中放入100条消息,则只会读取前5条消息。因此,在这种情况下,处理不需要第三方服务的消息会被延迟。

关于如何仅限制与第三方服务相关的部分的任何想法?

提前致谢

1 个答案:

答案 0 :(得分:3)

默认情况下,JMS端点以某种模式运行,其中每个JMS消息按顺序处理。如果由于异步处理而希望允许处理消息(乱序),则需要通过在端点上配置asyncConsumer=true来启用此明确说明。

请参阅JMS文档中的更多详细信息:http://camel.apache.org/jms