Apache Camel - 只有当前没有处理消息时才发送到seda队列?
问题描述:
才有可能实现以下:Apache Camel - 只有当前没有处理消息时才发送到seda队列?
- 发送MSG至传入,路线A处理消息
- 发送MSG b键传入,路径B处理消息
- 发送MSG至传入,但由于routeA仍在处理第一条消息,因此它将开始阻止传入的路由来处理更多消息。
一旦路线A完成时,进入的路由器发送所述第三消息发送到A和状态越来越消息从传入队列
from(incomingQueue)
.routeId("Incoming")
.choice()
.when(header("key").isEqualTo("a"))
.to("seda:A")
.when(header("key").isEqualTo("b"))
.to("seda:B")
;
from("seda:A")
.routeId("A")
.process(processor);
from("seda:B")
.routeId("B")
.process(processor);
答
SEDA将在路由回ACK立即生产者和队列中的请求在内部A/B ....
要阻止incomingQueue路由中的生产者发送到A/B路由,直到它们完成,然后使您的A/B路由DIRECT(同步)。
说明 - 我认为这是你要的是什么,但请记住,在A封邮件/航线也将阻止所有的B邮件使用此设置,以及...
另一种选择是使用类似ActiveMQ message groups,它允许单线程处理相关的消息,同时允许其他组的并行处理,等等......
正如你所说,Direct会阻止所有B消息。我想也许只是设置一个标志或一些东西会工作... – J2B