2

简要总结一下我目前正在使用的内容:

我决定是否可以使用 1 个主题与需要 N 个主题以及相关元数据/过滤器来执行此操作。

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

我最初的工作是在网络应用程序上动态创建 1-9999 个主题(可以创建 10 000 个主题的限制,因此使用序列的最后 4 个字符)在排队的消息上。然后将在元数据中使设备完全串行。这样,当设备连接到套接字服务器时,我可以使用特定规则创建 N 个订阅,并在设备断开连接时关闭它们。

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

我对使用服务总线的 SQLFilters 非常陌生,因此将不胜感激任何帮助:)

4

1 回答 1

3

好问题!首先,我应该说我会在您的情况下使用 IoT Hubs,它是针对 IoT 场景优化的类似“队列”的服务,包括管理和指挥。或事件中心,但它们的命令模式优化较少。

1) 事件中心

2) 物联网中心

第一个适用于更面向事件的场景。我的意思是 - 从后端实现设备管理对于事件中心将更加复杂,而对于物联网中心则不太复杂。

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

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

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

因此,我建议考虑使用物联网/事件中心而不是 SB 主题/队列,因为在物联网领域,针对这些工作负载优化的服务最初应该比未优化的服务表现更好。

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

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

设备 2 云:

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

云 2 设备:

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

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

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

于 2016-05-17T11:59:32.487 回答