简单总结一下我目前正在做的事情:
我正在决定是否可以使用 1 个主题来完成此操作,还是需要 N 个主题,并且都使用相关的元数据/过滤器。
我差不多有3件了;现场设备连接到的套接字服务器(辅助角色)、Azure 服务总线消息传递以及最后的 Web 应用程序。 用户可以通过网络应用程序对要发送到设备的命令进行排队,但我们需要能够将消息保存在队列中,直到设备上线,然后它将获取所有消息。这就是我困惑的地方......
我最初是在 Web 应用程序上对排队的消息动态创建 1-9999 个主题(可以创建 10 000 个主题的限制,因此使用序列的最后 4 个字符)。然后,设备将在元数据中完整序列化。这样,当设备连接到套接字服务器时,我可以创建具有特定规则的 N 个订阅,并在设备断开连接时将其关闭。
但现在我想知道是否可以只有 1 个主题并将所有逻辑放在元数据中?
我对带有服务总线的 SQLFilters 非常陌生,因此我们将不胜感激:)
最佳答案
好问题!首先,我应该说,在您的情况下,我会使用 IoT 中心,这是针对 IoT 场景进行优化的类似“队列”的服务,包括管理和命令。或事件中心,但它们对命令模式的优化较少。
1) 事件中心
2) 物联网中心
第一个适用于更面向事件的场景。我的意思是 - 使用事件中心从后端实现设备管理会更复杂,而使用 IoT 中心则不太复杂。
我强烈建议您查看这些服务,因为服务总线是一项很棒的服务,但列出的服务更面向物联网。
从架构的角度来看,微软最近发布了物联网引用架构白皮书,您可以在此处下载。它包含从 Microsoft 角度来看可用于 Azure + IoT 项目的建议、服务、最佳实践等。
另一个有用的资源可能是 http://azureiotsuite.com 。它是实现的引用物联网架构。因此,如果单击“创建”,您的 Azure 订阅中将拥有两个引用架构(远程监控或预测维护)之一,并且您将能够查看所有流程。
因此,我建议考虑使用 IoT/事件中心而不是 SB 主题/队列,因为在 IoT 领域,针对这些工作负载优化的服务应该比最初未优化的服务表现更好。
其次,您没有指定如何将设备连接到辅助角色,所以正如我所看到的,有一个很好的库可以执行此操作,名为 SuperSocket .
所以,据我所知,您的解决方案架构可能如下所示:
设备 2 云:
设备 => 网关(SuperSocket 或其他)|| IoT 中心 => 设备注册表(请参阅上面指定的链接)
Cloud 2 设备:
用户界面 => 已注册设备的 IoT 中心 => 设备
设备注册表是比传输 ID 等更方便的 IoT 流方式。动态创建实体有一些缺点 - 例如,想象一下,如果创建命令将返回超时错误。我相信最好使用优化的服务。
当设备离线时,不会轮询队列。消息在停止之前有一定的保留时间,这是内置机制。
关于c# - Azure 服务总线 - 多个主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275313/