Как проверить доставку в PublishSubscribeChannel? - PullRequest
0 голосов
/ 21 октября 2018

У меня есть PublishSubscribeChannel в моем приложении, которое должно доставлять сообщения на разные MessageHandlers внутри одной JVM.Обработчики подписываются на канал с помощью аннотации @StreamListener.Канал использует Executors, поэтому доставка выполняется асинхронно.

Теперь я хочу проверить, что отправители и обработчики согласуются с конкретным типом объекта, который отправляется по каналу (тип Message body).AFAIU У меня есть два способа проверить это:

  1. Найти всех подписчиков данного канала и проверить их подпись.
  2. Отправьте сообщение на канал и убедитесь, что ни один из обработчиков не выдал исключение.

Я понятия не имею, как это сделать (1).И я думаю, что я мог бы сделать (2), слушая errorChannel (там не должно быть никаких сообщений), но я не совсем понимаю, как долго я должен ждать сообщений об ошибках.

Есть предложения?

1 Ответ

0 голосов
/ 21 октября 2018

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

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

Если вы избавитесь от исполнителя, было бы проще добавить перехватчик в канал, который будет уведомлен о любых исключениях в его afterSendCompletion()метод (удовлетворяющий вашим 2).

...