我有以下情况:
- 有固定数量的组。
- 有传入消息的 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);
此 Camel 路由使用 TCP 流,解析每个传入消息的有效负载并将其转换为MyMessage
pojo,并group-identifier
在与消息对应的交换器上设置标头...
现在我想消费seda:process
如下:
- 属于同一组的消息不能同时执行。
- 属于不同组的消息可以同时执行。
- 每条消息都应该通过调用来执行
run()
。我想为此提供/定义一个ExecutorService
,所以我可以控制线程数。
我可以在这里应用哪些企业集成模式?如何将这些概念映射到 Camel?
我了解到 ActiveMQ 具有消息组的概念(http://activemq.apache.org/message-groups.html)。这可能会提供一种方法来确保同一组的两条消息永远不会同时执行。不过,我不确定仅为此引入 ActiveMQ 是不是矫枉过正。这也可以用“核心”骆驼/Java来实现吗?