Azure 服务总线 - 多个主题?

Azure Service Bus - Multiple topics?

所以我现在正在做的事情的简要总结:

我正在决定我是否可以用 1 个主题来做这件事,还是需要 N 个主题,并且两者都与相关 metadata/filters。

我差不多有3件;现场单元连接到的套接字服务器(工作者角色),Azure 服务总线消息传递,最后是 Web 应用程序。 用户可以将要通过 Web 应用程序发送到设备的命令排队,但我们需要能够将消息保存在队列中,直到设备上线,然后设备才能获取所有消息。这就是我困惑的地方...

我最初是按照动态创建 1-9999 个主题(可以创建 10 000 个主题的限制,因此使用序列号的最后 4 个字符)的思路在 Web 应用程序上对排队的消息进行处理。然后将在元数据中拥有完整的设备序列。这样,当设备连接到套接字服务器时,我可以使用特定规则创建 N 个订阅,并在设备断开连接时将其关闭。

但现在我想知道是否可以只有 1 个主题并将所有逻辑放在元数据中?

我对带有服务总线的 SQLFilters 还很陌生,所以非常感谢任何帮助:)

好问题!首先,我应该说我会在你的情况下使用物联网中心,这是针对物联网场景优化的类似 "queue" 的服务,包括管理和命令。或事件中心,但它们的命令模式优化较少。

1) 事件中心

2) 物联网中心

第一个是针对更面向事件的场景。我的意思是 - 使用事件中心从后端实施设备管理会更复杂,而使用物联网中心则不那么复杂。

我强烈建议您看看这些服务,因为服务总线是很棒的服务,但列出的服务更面向物联网。

从架构的角度来看,Microsoft 最近发布了 IoT 参考架构白皮书,您可以在此处下载。它具有从 Microsoft 的角度来看可用于 Azure + IoT 项目的建议、服务、最佳实践等。

另一个有用的资源可能是 http://azureiotsuite.com。它是实施的参考物联网架构。因此,如果您单击“创建”,您的 Azure 订阅中将拥有两个参考架构(远程监控或预测性维护)之一,并且您将能够查看所有流程。

因此,我建议考虑使用 IoT/Event 集线器而不是 SB Topics/Queues,因为在物联网领域,针对这些工作负载优化的服务应该比未优化的服务表现更好最初。

其次,您没有指定如何将您的设备连接到 Worker Role,所以我看到有一个名为 SuperSocket 的很好的库可以做到这一点。

因此,据我所知,您的解决方案架构可能如下所示:

设备 2 云:

设备 => 网关(SuperSocket 或其他)|| IoT 中心 => 设备注册表(参见上面指定的链接)

云 2 设备:

用户界面 => 已注册设备的 IoT 中心 => 设备

设备注册表比传输 ID 等更方便地执行 IoT 流程。实体的动态创建有一些缺点 - 想象一下,如果创建命令将 return 超时错误,例如。我相信最好使用优化服务。

当设备离线时,它不会轮询队列。消息在停滞之前有一些保留时间,这是内置机制。