Легкий рабочий процесс с верблюдом - PullRequest
0 голосов
/ 13 июня 2018

В настоящее время я занимаюсь разработкой облегченной системы обмена сообщениями.Для этой системы обмена сообщениями (легкий концентратор) у меня есть требование небольшого рабочего процесса на основе маршрутов.Во-первых, я не хочу использовать механизм рабочего процесса или механизм ударов в минуту, поскольку это было бы излишним для такого легкого решения для обмена сообщениями.

Мои требования просты - я предпочитаю иметь решающий модуль / компонент, который в основном решает следующий шаг / конечную точку / компонент.При принятии решения принимается во внимание текущий статус сообщения, некоторые предопределенные функциональные правила (возможно, в базе данных) и некоторые технические правила, если это необходимо.Я думал о связи на основе jms между различными конечными точками / компонентами (эти конечные точки были бы внутренними конечными точками как часть приложения) - это позволило бы слабую связь, а также было бы более масштабируемым.

Я смотрел наверблюд и как и если это могло бы помочь, но я не мог найти способ, где следующие шаги в маршруте будут определены центральным решающим модулем / компонентом.

Я также искал возможность иметь несколько решающих модулей и при необходимости объединять их в цепочки (если верблюд будет там полезен).Любая идея, как это может быть реализовано с использованием верблюда или любого другого фреймворка или просто с помощью Java с пружиной?

1 Ответ

0 голосов
/ 13 июня 2018

Вы можете использовать заголовок сообщения, установленный вашим решением, и маршрутизацию на основе содержимого для управления потоком сообщений.Например:

В вашем маршруте, который получает сообщение

...
.from(endpointreceivingmessage)
.process(decider)
.recipientList(simple("direct:${header.destinationRoute"));

В вашем процессоре принятия решений

...
doProcess(Exchange exchange) throws Exception{
Message message = exchange.getIn(); 

//logic to determine next step
message.setHeader("destinationRoute", "DestinationRoute1"); 

exchange.setIn(message); 
}

Тогда вы могли бы иметь другие маршруты для вашего следующего шага, которыйтакже могут быть маршруты с процессорами для цепочки решений.

Альтернативой использованию receientList будет использование выбор:

.choice
 .when(simple("{header.destinationRoute} is 'DestinationRoute1'"))
  .to("direct:DestinationRoute1")
 .when(simple("{header.destinationRoute} is 'DestinationRoute2'"))
  .to("direct:DestinationRoute2")
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...