Java 阿帕奇骆驼。路线的一部分
我有一个JMS队列。收到消息后,需要将其存储到数据库中。然后,根据某些条件,我希望以固定速率将此消息发送给第三方服务,因此我使用节流 我有以下路线:Java 阿帕奇骆驼。路线的一部分,java,apache-camel,jms,throttling,Java,Apache Camel,Jms,Throttling,我有一个JMS队列。收到消息后,需要将其存储到数据库中。然后,根据某些条件,我希望以固定速率将此消息发送给第三方服务,因此我使用节流 我有以下路线: from("jms:queue") .bean(persistingListener) .choice() .when(some condition ..) .throttle(5)
from("jms:queue")
.bean(persistingListener)
.choice()
.when(some condition ..)
.throttle(5)
.asyncDelayed()
.bean(thirdPartyServiceClient)
.endChoice();
但是,整个路由被限制,而不是与第三方服务客户端相关的部分。我的意思是,如果我在队列中放入100条消息,那么只会读取前5条消息。因此,在这种情况下,不需要第三方服务的消息的处理会延迟
关于如何仅在与第三方服务相关的部分节流,有什么想法吗
提前感谢缺省情况下,JMS端点以一种模式运行,其中每个JMS消息都是按顺序处理的。如果您希望允许由于异步处理而处理消息(无序),则需要通过在端点上配置
asynchconsumer=true
来启用此解释
请参阅JMS文档中的更多详细信息:您的条件是否有可能始终为真?您还应该指定时间窗口。@alobodzk,好吧,没有这样的机会,我认为这无关紧要。默认情况下,节流时间窗口设置为1秒。在JMS端点上设置asyncConsumer=true。看看它的文档:@Claus-Ibsen,谢谢,这很有帮助。请创建一个答案,以便我可以接受