Где подписаться на события RabbitMq в приложении SignalR - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть приложение SignalR, которое использует RabbitMq для обработки сообщений в фоновом режиме. (.Net Core 2.1) Процесс такой:

  1. Клиент подключается к концентратору SignalR
  2. Клиент отправляет сообщение в концентратор SignalR.
  3. SignalR Hub публикует сообщение в очереди RabbitMq.
  4. Это важно (я не знаю эту часть) - что-то подписано на очередь RabbitMq
  5. Когда сообщение поступает в очередь, что-то уведомляет клиентов с помощью концентратора SignalR.

Теперь у меня проблема в шаге 4. Это что-то, я не знаю, где это поставить.

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

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

Поскольку я использую обмен "topic", где тема и clientId известны только при подключении клиентского клиента, мне нужно подписаться на RabbitMq, когда потребительский клиент подключается к концентратору SignalR, т.е. (Метод OnConnected в концентраторе SignalR)

Мне нужна помощь по этому вопросу, как сделать подписку на очередь RabbitMq на подключенном клиенте SignalR, и это должно быть долгоживущим. И cliendId

...