我正在使用Azure Service Bus主题和订阅。它用于在整个应用程序中发送控制消息。消息侦听器(订阅者)以worker角色运行,他们正在拾取消息并处理请求。即使有多个侦听器同时运行,总线中的每条消息也只能被拾取一次。
使用服务总线没有问题;但是,我们在本地调试/测试应用程序时遇到了一些问题。我们有2个服务总线,一个用于云,一个用于本地调试。现在,如果多个人同时调试应用程序,则只有一个系统(随机)选择该消息。这是预期的行为,但它在调试时会造成麻烦。
有什么办法可以将本地模拟器用于服务总线吗?我做了一些研究,但我找不到任何可靠的解决方案。我们如何单独调试应用程序?
答案 0 :(得分:6)
Azure Service Bus是一个拥有竞争消费者的经纪人。让多个开发人员使用相同的命名空间进行调试将非常困难(消息锁定持续时间已过期,而另一个正在调试的开发人员获得了该消息)。 我建议每个开发人员调查一个命名空间。使用MSDN许可证,您可以获得足够的Azure信用,让每个开发人员都能在沙盒中使用#34;命名空间。至于如何使其工作,您可以从配置文件,环境变量等中读取。
在ASB for Windows Server上 - 目前它是在版本1.1上,其中Azure SB是3+。托管版本将始终领先于内部部署。需要考虑的事情。
答案 1 :(得分:4)
不幸的是,没有Azure SB本地模拟器。 That was asked before,您可以尝试使用Service Bus for Windows Server,但在功能支持/功能等方面稍微落后于云服务。但是,它仍然支持Azure SDK。 MSDN link for SB for WS
答案 2 :(得分:1)
应该通过抽象服务总线实现来解决该问题,以便可以将其交换为您可以实际在本地(或在内存中)运行的东西。我建议不要重新发明轮子,而是选择像Masstransit https://masstransit-project.com这样的库。
答案 3 :(得分:1)
我们最终在调试时为每个开发人员使用了不同的主题名称。
答案 4 :(得分:0)
我们在路径中使用 devlopers 机器名称来表示很多开发内容。例如,像“TheEventMessageQueue”这样的 queueName 可以是“TheEventMessageQueue-Machine123”,我们使用开发订阅,所以我们不会弄乱:)
通过使用机器名称,如果它失控,很容易判断它属于谁