Apache Camel - 只有当前没有处理消息时才发送到seda队列?

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,它允许单线程处理相关的消息,同时允许其他组的并行处理,等等......

+0

正如你所说,Direct会阻止所有B消息。我想也许只是设置一个标志或一些东西会工作... – J2B