Как я могу включить общее поведение в несколько маршрутов Apache Camel? - PullRequest
0 голосов
/ 10 мая 2018

Я использую Camel 2.19.2 в приложении Spring Boot 1.5.8. Если я хочу, например, чтобы несколько моих маршрутов были «осведомлены о статусе», как я мог бы добиться этого? Под «осведомленностью о состоянии» я подразумеваю, что маршрут будет запущен, уведомит компонент о том, что рабочий процесс начался, затем он будет выполнять логику, относящуюся к маршруту, и, когда она будет завершена, он уведомит компонент о завершении рабочего процесса. Я хочу, чтобы это происходило автоматически, если это возможно, и без необходимости вызывать определенную логику в каждом из построителей маршрутов, для которой я хочу использовать эту возможность.

Вот пример кода, который я имею в виду:

public class FooRouteBuilder extends StatusAwareRouteBuilder {
    @Override
    public void configure() {
        // Here I want to have this route know how to notify something
        // that this processing has begun, but I do not want to have
        // to explicitly call a processor to make it happen, but it
        // should know what to do by virtue of extending a custom
        // route builder, if appropriate, or by some other/better
        // mechanism

        // Now conduct any route-specific logic
        from("vm:myAction")
            .process("myProcessor");

        // Now handle the status notification that this is finished...
        // Here I want to have this route know how to notify something
        // that this processing has finished
    }
}

Концептуально, это почти как АОП, поэтому я хотел бы иметь возможность определить это поведение в одном месте и включить его в некоторое количество маршрутов, которые должны использовать это поведение. Есть ли способ, которым я могу это сделать? Я видел, что есть совет с тестированием, но он мне нужен для нормальной работы. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Возможно Перехватчики верблюдов могут вам помочь.Обычно это небольшие общие маршруты, которые применяются ко всем или большинству ваших маршрутов .

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

Существует три разновидности.

  • intercept перехватывает каждый шаг обработки при маршрутизации Exchange по маршруту.
  • interceptFrom перехватывает каждый входящий Exchange на маршруте (начало обработки)
  • interceptSendToEndpoint перехватывает, когда Exchange собирается отправить в конечную точку.

Перехватчики могут быть настроены на «стрельбу» только для определенных типов конечных точек или с помощью предиката верблюда при других конкретных условиях.

Существует также функция onCompletion до сделать аналогичную вещь при завершении маршрута .Либо при успешном завершении после завершения сбоя, либо оба (по умолчанию).

0 голосов
/ 10 мая 2018

Я думаю, что RoutePolicy и RoutePolicyFactory могут быть ответом, т. Е. Вы можете вызвать обратный вызов при запуске / остановке маршрута или обмена.

Подробнее см. http://camel.apache.org/routepolicy.html

...