Я хотел попробовать Apache Camel Circuit Breaker (http://camel.apache.org/load-balancer.html) Шаблон. Он ведет себя не так, как хотелось бы.
Верблюжья маршрутизация
Моя маршрутизация выглядит так
from("direct:foo")
.loadBalance()
.circuitBreaker(1, 5000, HustException.class).to("direct:pleaseHoldTheLine")
.to("direct:bar");
from("direct:bar")
.process(exchange -> {
Integer value = exchange.getIn().getBody(Integer.class);
System.out.println("[BAR] " + value);
if (value.equals(12)) {
throw new HustException();
}
});
from("direct:pleaseHoldTheLine")
.process(exchange -> {
Integer value = exchange.getIn().getBody(Integer.class);
System.out.println("[PLEASE_HOLD_THE_LINE] " + value);
});
Основное приложение
Основное приложение запускает сообщения с целочисленными значениями от 0 до 99 каждую секунду на маршрут foo.
Что я ожидаю:
При переходе к сообщению с 12 маршрут foo выдает исключение, и маршрут pleaseHoldTheLine должен вмешаться. Через 5 секунд маршрут foo снова запрашивается, и, если исключения не произойдет, маршрут foo снова позаботится об этом.
Что происходит:
[PLEASE_HOLD_THE_LINE] 0
[PLEASE_HOLD_THE_LINE] 1
[PLEASE_HOLD_THE_LINE] 2
[PLEASE_HOLD_THE_LINE] 3
[PLEASE_HOLD_THE_LINE] 4
[PLEASE_HOLD_THE_LINE] 5
[PLEASE_HOLD_THE_LINE] 6
[PLEASE_HOLD_THE_LINE] 7
[PLEASE_HOLD_THE_LINE] 8
[PLEASE_HOLD_THE_LINE] 9
[PLEASE_HOLD_THE_LINE] 10
[PLEASE_HOLD_THE_LINE] 11
[PLEASE_HOLD_THE_LINE] 12
[PLEASE_HOLD_THE_LINE] 13
[PLEASE_HOLD_THE_LINE] 14
...
БВ Хьюберт