我有一个以 SignalR 作为模块的多租户应用程序。当用户登录到他的租户时,我将该用户添加到由租户 ID 定义的组中。因此,所有用户现在都被划分为租户。我的集线器中的示例方法如下;
public async Task SendMessage(string user, string message)
{
var tenantId = Context.GetHttpContext().Request.Path.Value.Replace("/", "");
await Clients.Group(tenantId).SendAsync("ReceiveMessage", user, message);
}
如您所见,在这种情况下发送消息的任何客户端只会转到同一租户中的其他人。
我的下一个任务是向我的域事件公开中心,以便他们发送适当的通知。当我要这样做时,我会注入 IHubContext 以便我可以使用 Client 属性中的方法。问题是默认情况下实现不知道租赁。因此,如果我执行 Client.All.SendAsync,它会将数据发送给所有租户中的所有用户。
那么,有没有办法包装这些方法呢?因此,例如,如果我可以在我们使用 All()、AllExcept() 等时包装这些 Client 方法。它只会将数据发送到用户连接到的同一个租户。这样其他开发者就不必担心每次想要发送消息时都从上下文设置租户 ID。
我在堆栈溢出中找不到与此相关的任何内容。