在SignalR应用程序中在哪里订阅RabbitMq事件

时间:2018-11-16 17:43:31

标签: rabbitmq asp.net-core-signalr

我有一个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集线器的消费者客户端进行订阅。

因为我使用“主题”交换,其中仅当连接了消费者客户端时才知道主题和clientId,所以当消费者客户端连接到SignalR集线器时,我需要订阅RabbitMq。 (SignalR集线器上的OnConnected方法)

在这方面,我需要帮助,如何在连接的SignalR客户端上订阅RabbitMq队列,这需要长期存在。并且cliendId

0 个答案:

没有答案