我们正在评估“Azure 服务总线”,以在 Web 服务器和应用服务器之间使用请求响应模式。我们计划有两个队列:
请求队列
响应队列
Web服务器将消息推送到请求队列并订阅响应队列。 通过比较MessageID和CorrelationId,可以接收返回的响应,然后将响应发送回浏览器。
但是通过云,使用弹性扩展,我们可以增加/减少 Web 服务器(和应用程序服务器)实例。 我们想知道这种模式在这里是否能发挥最佳作用。
为了完成这项工作,我们必须有一个请求队列和多个主题(每个 Web 服务器实例一个)。
这有两个缺点:
随着网络服务器实例的增加/减少,我们将有 也可以创建/删除主题。
所有消息都会推送到 所有主题。因此,每条消息都会被整个网络处理 服务器。这不是一个有效的方法。
请分享您的想法。
提前致谢
最佳答案
当您横向扩展端点时,您不希望具有实例关联性。您希望依赖竞争的消费者,而不关心端点的哪个实例处理消息。
例如,如果您收到响应并将其写入数据库,那么您很可能不关心端点的哪个实例写入了数据。但是,如果您有一些内存中状态或任何其他信息,仅适用于发起请求的端点,并且处理回复消息需要该信息,那么您就具有实例关联性,需要删除它或使用允许解决该问题的技术。例如,带有背板的 SignalR 之类的东西可以向所有 Web 端点实例传达回复消息。
请注意,理想情况下您应该尽可能避免实例关联。
关于azure - 使用 Azure 服务总线的可扩展请求响应模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45956830/