在本地使用 Azure 服务总线

Using Azure Service Bus in local

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

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

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

很遗憾,没有 Azure SB 本地模拟器。 That was asked before, and you can try to use Service Bus for Windows Server but it is slightly behind the cloud service in terms of features support/functionality, etc. Still, it supports Azure SDK, for example. MSDN link for SB for WS.

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

在 Windows 服务器的 ASB 上 - 目前它是 1.1 版,而 Azure SB 是 3+。托管版本将始终领先于本地版本。需要考虑的事情。

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

这样的库

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

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

如果问题失控,使用机器名很容易看出问题属于谁