У меня есть приложение SignalR, которое использует RabbitMq для обработки сообщений в фоновом режиме. (.Net Core 2.1)
Процесс такой:
- Клиент подключается к концентратору SignalR
- Клиент отправляет сообщение в концентратор SignalR.
- SignalR Hub публикует сообщение в очереди RabbitMq.
- Это важно (я не знаю эту часть) - что-то подписано на очередь RabbitMq
- Когда сообщение поступает в очередь, что-то уведомляет клиентов с помощью концентратора SignalR.
Теперь у меня проблема в шаге 4. Это что-то, я не знаю, где это поставить.
Сначала мне сложно поместить его в концентратор SignalR, чтобы концентратор SignalR подписывался на очередь RabbitMq и обрабатывал сообщения. Но хабы SignalR недолговечны и воссоздаются при каждом запросе, поэтому, когда сообщение RabbitMq снимается, контекст хаба SignalR уже удаляется.
Тогда мне сложно создать одноэлементную службу при запуске приложения и выполнить там подписку на очереди RabbitMq, но при запуске приложения я не знаю, кому нужны клиенты для подписки на очередь RabbitMq.
Требуется, чтобы подписка была сделана для каждого клиента-клиента, который подключается к хабу SignalR.
Поскольку я использую обмен "topic", где тема и clientId известны только при подключении клиентского клиента, мне нужно подписаться на RabbitMq, когда потребительский клиент подключается к концентратору SignalR, т.е. (Метод OnConnected в концентраторе SignalR)
Мне нужна помощь по этому вопросу, как сделать подписку на очередь RabbitMq на подключенном клиенте SignalR, и это должно быть долгоживущим. И cliendId