2016-01-15 2 views
3

Я работаю над добавлением функций регистрации/мониторинга для нескольких развертываний интеграции с весной. Я хочу создать транзакцию logger в начале рабочего процесса и закрыть транзакцию журнала в конце рабочего процесса. В конце транзакции logger я отправлю журналы и метрики на централизованный сервер регистрации. В конце дня я хочу видеть журналы для всех сообщений, которые прошли через рабочие процессы в нескольких развертываниях интеграции с весной.Spring Integration: как узнать, когда завершен рабочий процесс?

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

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

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

Какие-либо стратегии/идеи о том, как закрыть транзакцию регистрации?

Пример рабочего процесса образца показан на изображении ниже:

enter image description here

ответ

1

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

Я вообще предпочитаю, чтобы добавить атрибут order на таких конечных точек - сделать регулярную конечную точку order="1" и терминатор order="2" потока - ясно показывая, что называется после основной конечной точки.

Важно, чтобы в канал не добавлялся исполнитель задачи, поэтому конечные точки называются последовательно в одном потоке.

Смежные вопросы