EIP / Apache Camel-如何同时,但按组自动处理消息?

时间:2018-12-14 18:36:26

标签: java concurrency architecture apache-camel enterprise-integration

我有以下情况:

  • 有固定数量的组。
  • 有一个传入消息的TCP流。每封邮件都与一组相关。

我按照以下方式开始骆驼路线:

public class MyMessage implements Runnable {
    public void run() {
        // omitted here
    }
}

from("netty:tcp://localhost:7777?textline=true&sync=false")
   ... // omitted here: parse message to pojo MyMessage, set header "group-identifier"
   .to(seda:process);

此骆驼路由使用TCP流,解析每个传入消息的有效载荷并将其转换为MyMessage pojo,并在与消息相对应的交换上设置group-identifier头...

现在我要消耗seda:process如下:

  • 属于同一组的消息不能同时执行。
  • 属于不同组的消息可以同时执行。
  • 每条消息都应通过调用run()来执行。我想为此提供/定义一个ExecutorService,以便我可以控制线程数。

我可以在此处应用哪些企业集成模式?如何将这些概念映射到骆驼?

我了解到ActiveMQ具有消息组(http://activemq.apache.org/message-groups.html)的概念。这可能提供一种确保同一组的两个消息永远不会同时执行的方法。不过,我不确定仅为此而引入ActiveMQ不会算是过分的。也可以使用“核心” Camel / Java来实现吗?

1 个答案:

答案 0 :(得分:5)

在ActiveMQ中很容易做到这一点。以下代码段可根据需要模拟正在执行的消息:

  • 属于同一组的消息按顺序执行。
  • 属于不同组的消息会同时执行。

这依赖于http://activemq.apache.org/message-groups.html中所述的ActiveMQ消息组。

     SELECT  * from table 
     WHERE time >= '2018-12-13' 
       AND time <= '2018-12-16 23:59:59.999' 
     group by code
     ORDER BY ID

那是说,我(仍然)想知道这是否可以使用纯EIP /骆驼芯完成。