Добавить весеннюю интеграцию хранилища сообщений dsl

В настоящее время я рассматриваю варианты добавления отслеживания всех сообщений в моем приложении в реальном времени.

Я включил историю сообщений, так что технически я получу все шаги, произошедшие во время потока.

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

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

Вариант № 01

Добавьте вызов метода handle () в каждом потоке, чтобы асинхронно добавить сообщение и историю в кеш диска.

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

Есть ли какой-нибудь вариант 02, который я могу использовать, например, добавить перехватчик и т.д., который будет вызываться всякий раз, когда поток завершается успешно или неуспешно?


person Makky    schedule 04.01.2020    source источник


Ответы (1)


Вам необходимо использовать перехватчик WireTap для каналов: https://docs.spring.io/spring-integration/docs/5.2.2.RELEASE/reference/html/core.html#channel-interceptors. И настройте шаблон перехватчика глобального канала для этого подключения, чтобы указать те каналы, которые вы хотите отслеживать. В том же документе есть информация по этому поводу. Также см. Конфигурацию аннотации по этому вопросу: https://docs.spring.io/spring-integration/docs/5.2.2.RELEASE/reference/html/configuration.html#annotations

person Artem Bilan    schedule 04.01.2020
comment
Есть ли у вас какой-нибудь пример или образец, который я могу использовать? Когда я использую WireTap, я вижу только исходное полученное сообщение, но не то, которое я вижу в методе handle. - person Makky; 04.01.2020
comment
Вы проводите прослушку точно на канале перед этой ручкой? Вам может потребоваться указать явный канал в потоке, хотя - person Artem Bilan; 04.01.2020
comment
Да, я установил прослушку прямо перед ручкой. Это правильно? - person Makky; 04.01.2020
comment
На самом деле это сработало. Имеет значение, где находится прослушка в lofw - person Makky; 04.01.2020
comment
Это правильно. Это действительно важно. См. Документацию по WireTap, начиная с log(): docs.spring .io / Spring-integration / reference / html /. - person Artem Bilan; 04.01.2020
comment
Быстрый вопрос, как я могу сделать WireTap как ASYNC прямо сейчас Я вижу, что метод handle вызывается только после того, как он завершился с WireTap - person Makky; 05.01.2020
comment
WireTap можно настроить с помощью канала, и никто не мешает вам использовать QueueChannel или ExecutorChannel. Таким образом, вся ваша логика постукивания будет асинхронной. - person Artem Bilan; 05.01.2020
comment
Любой пример с этим? Это поможет - person Makky; 05.01.2020
comment
Не уверен, чего вы от меня ожидаете, потому что в DSL есть не более чем перегруженный метод wireTap() с аргументом канала (или его имени). См. Также описание шаблона WireTap в документе, который я упомянул в своем ответе. Главное - это действительно канал для отправки перехваченного сообщения. - person Artem Bilan; 05.01.2020
comment
Я понимаю. Возможно, у меня будет асинхронный сервис внутри этого потока каналов прослушки. - person Makky; 05.01.2020