У меня такая ситуация:
- Есть фиксированное количество групп.
- Есть TCP поток входящих сообщений. Каждое сообщение относится ровно к одной группе.
Я начинаю маршрут Camel следующим образом:
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 только для этого не будет излишним. Можно ли этого также достичь с помощью «основного» Camel / Java?