20

我正在使用 Azure 服务总线主题和订阅。它用于跨应用程序发送控制消息。消息侦听器(订阅者)以工作角色运行,它们正在接收消息并处理请求。总线中的每条消息只能被拾取一次,即使有多个侦听器同时运行。

使用Service Bus没有问题;但是,我们在本地调试/测试应用程序时遇到了一些问题。我们有 2 条服务总线,1 条用于云端,1 条用于本地调试。现在,如果多人同时调试应用程序,则消息仅由系统中的一个(随机)选择。这是预期的行为,但在调试时会造成麻烦。

有什么办法可以将本地模拟器用于服务总线?我做了一些研究,但我找不到任何可靠的解决方案。有什么方法可以单独调试应用程序吗?

4

5 回答 5

9

Azure 服务总线是具有竞争消费者的代理。让多个开发人员使用同一个命名空间进行调试会很困难(消息锁定持续时间已过期,而另一个恰好正在调试的开发人员收到了该消息)。我建议查看每个开发人员的命名空间。使用 MSDN 许可证,您将获得足够的 Azure 信用,让每个开发人员在“沙盒”命名空间中工作。至于如何让它工作,你可以从配置文件、环境变量等中读取。

在 Windows Server 的 ASB 上 - 当前版本为 1.1,而 Azure SB 为 3+。托管版本将始终领先于本地版本。需要考虑的事情。

于 2016-05-04T23:19:27.123 回答
8

不幸的是,没有 Azure SB 本地模拟器。之前有人问过这个问题,您可以尝试使用Service Bus for Windows Server,但它在特性支持/功能等方面稍稍落后于云服务。但它仍然支持 Azure SDK,例如。用于 WS 的 SB 的 MSDN 链接

于 2016-05-04T18:10:58.930 回答
3

该问题可能应该通过抽象服务总线实现来解决,以便可以将其交换为您实际上可以在本地(或在内存中)运行的东西。我建议不要重新发明那个轮子,而是选择像 Masstransit https://masstransit-project.com这样的库。

于 2020-07-10T10:01:30.337 回答
2

我们最终在调试时为每个开发人员使用了不同的主题名称,效果非常好。

于 2020-08-28T08:07:37.417 回答
0

我们在路径中使用 devlopers 机器名称来处理很多开发内容。例如,像“TheEventMessageQueue”这样的队列名称可以是“TheEventMessageQueue-Machine123”,我们使用开发订阅,所以我们不会弄得一团糟:)

通过使用机器名称,如果它失控,很容易确定它属于谁

于 2021-04-19T11:01:41.423 回答