我的Azure云服务应用程序中有两个角色:一个Web角色(此处为信号器连接)和一个辅助角色。
Web角色使用Azure服务总线作为其横向扩展提供程序。
在某些时间点,工作人员角色会发出某些事件。我想将这些数据直接发送给连接到Hub的客户端。
我当前的实现涉及worker角色将消息放置在Web角色订阅的服务总线队列上,然后Web角色通过HubContext调用将此消息转发给客户端。
我的问题是:如何从工作者角色直接将此消息发送给已连接的客户端?到目前为止,我已经考虑了3种方法:
将信号器配置为Web角色,以便它们使用相同的servicebus主题。 - 这不会像工作者角色实例那样从用于Web角色的主题订阅中“窃取消息”。这似乎是最干净的方法,但配置是一个问题。
使用.Net客户端发送集线器消息 - 这不是理想的,因为它会对Web角色施加不必要的负载,并且与上述方法相比,服务总线消息数量增加一倍。
手动编写与主题相关的信号兼容消息 - 非常hacky并且可以成功破坏更改。
我知道该团队目前正在为下一个版本重新进行扩展,但这在某些时候是否可行?
编辑: 我注意到RabbitMq implementation支持这一点。
答案 0 :(得分:1)
我的配置似乎问题是第一种方法不起作用。 但是,即使在循环中少了一条消息,该方法似乎端到端速度较慢(大约150毫秒)。
我会等待,看看在进行任何更改之前,横向扩展工作是否会对此方法进行任何改进。