signalr-hub - 多租户应用程序中的 SignalR - 包装 IHubContext<>
问题描述
我有一个以 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() 等时包装这些客户端方法。它只会将数据发送到用户连接的同一租户。这样,其他开发人员不必担心每次要发送消息时从上下文中设置租户 ID。
我在堆栈溢出中找不到与此相关的任何内容。
解决方案
推荐阅读
- javascript - 如果子组件中有相关数据,则仅在父组件中显示图标,但为了获得数据,我必须单击该图标
- nginx - 更新 Nginx 块来做两件不起作用的事情
- python - Bigquery api 使用 python Api
- laravel - 如何在 laravel 中过滤模型的关系?
- arrays - 在 Google 表格中,按名称而不是列号链接到列
- java - 在 JOOQ 中实现 batchMerge()
- python - 从 url 调用 django 应用程序中的函数
- python - Pandas:根据某个时间间隔将数据集拆分为多个周期
- ios - 如何结合 arc diff 和 fastlane?
- git - 是否可以在不拉动的情况下更新子模块 SHA?