传统的web应用可能不需要可靠的消息服务,但当前以物联网为代表的多样终端非常需要一个消息协议来提供服务。
建筑模式来来往往,如果说有一个永恒不变的事情,那就是需要一个可靠的消息传输。
消息队列也许在客户端/服务端世界有过它的盛世高峰,它处理大型机之间的信息交流并与我们的财务网络连接,但是它从来没有离开我们---尽管事实上直接访问api是大多数当前开发的主要特点。
直接访问api在大多数我们的web系统中工作良好,在有限的服务器资源及进程通信的后端。然而当我们转移到微型服务架构以及云---特别是我们面对物联网的时候,那么事情改变了。
突然,由于物联网的因素,我们将处理由不同规则部署的数不清的组件系统,还要处理终端发来的成千,可能不是上万条的业务消息。在这种情况下,著名的mvc设计模式将不能使用,所以我们需要转换到微服务-安全模式,回去计算机场景概念就像是参与者,使用参与者/消息模式去处理我们的服务如何与任意数量的终端进行通信。
发布订阅的救援
这是消息队列工具要发挥的作用,使用发布/订阅模式为将数据传输到服务器端提供可靠的方法。微服务参与者可订阅到已发布的连接并对接收到信息触发相应的动作。这种模式很适合将设备和服务连接起来,当有新的设备不断增加时仍能确保服务稳定。
由IBM开发的MQTT(消息队列传输协议)是一个轻量级的发布/订阅消息协议,目前已经被OASIS标准化。最初它被设计为大规模的WebSphere MQ系统与SCADA设备链接,后来MQTT演变成为通用的目的消息队列系统,它能允许一台服务器管理成千上万个终端,这是一个很简单的消息协议它并不限制于TCP/IP,能被很有限处理能力的设备所使用。
发布/订阅协议并不陌生。不过它也许在大多数开发者工具箱的底层里,它们是一个为服务架构创建消息大巴简单方法。MQTT是发布/订阅模相关的简单执行,通过消息发布到主题,而主题将会被客户端应用订阅。主题是按等级划分的,所以你可以订阅一个资源中的不同等级的信息元素。
等级划分的主题
例如,货车中的冷冻装置中的一系列传感器可以这么组成一个等级划分的主题格式:冷冻装置传感器/卡车/温度/区域,这里卡车和区域可用于标识过滤信息:一个车辆或一个区域下的多个车辆信息。
应用程序可订阅MQTT服务器上可用的主题,使用明确的订阅获取指定的消息种子,或使用通配符获取不同等级主题聚集的消息。你可以使用通配符替换一个等级架构中的一层或所有其余的元素。
在我们事例中,仪表货车+冷冻装置传感器+温度能让我们看到所有区域里所有卡车上的温度,同时,冷冻装置传感器/卡车1#将获得名字为卡车1上的所有冷冻传感器上的数据。这个方法意味着你可能使用多个微服务处理不同的主题--一个每天处理特定传感器或数据的监控,另一个处理观察错误情况等等。
MQTT提供保持最后一条消息发送的选项,因此当前的客户端连接到服务端时,就有可能在订阅的同时下载初始消息而不用等待从源发送新的消息。源还有一个选项"Will"--一个预先存储在服务器上的消息用于在断开连接时递送。客户端在will模式下可以断开连接,当然如果他们没有清空sesssion标记,可以重新连接并查看存在的订阅。联合使用session flags和wills令你可以处理源于不稳定的网络及自动化服务规模的问题。
设置服务质量
MQTT中一个非常有用的特色就为你的消息设置QoS规则的能力。这里有三个Qos级别可以使用:
Level 0:是最佳劳动选项,即出错后无条件重试。这种方法很适合用于持续的监测像趋势事务而不是实际的消息。作为控制系统的一部分,你可能使用level 0连接到流处理器或者一个机器学习系统来处理大量的消息。
Level 1:是”至少一次(at least once)“选项,用于消息可以保证被递送,尽管多次递送可能产生。如果你在处理消息量较少,通过编程处理重复项,这将是你的最佳选项。非常快,且低影响,并能与各种不同应用程序模块工作。
只有一次:是最为计算强调的层次,但它保证每个消息有且只有一次被接收到。
在内部,MQTT是一个非常简单的协议,它为构建物联网应用程序或超大规模云中的处理能力提供思想。当新的设备被添加到网络中,他们可以快速成为新的主题资源,同时新的客户端可以它们创建同时订阅主题。URI 方案令连接服务器接收消息非常简单。有大量的工具提供帮助测试MQTT连接,包括桌面和移动应用---即使是使用websockets的app应用。
使用MQTT为物联网创建消息驱动的服务非常简单,有各种服务包括知名的Mosquitto以及用于Arduino的事例代码及其它制造商。在客户端,MQTT同时被知名的工具支持,包括 Node.js-基于Secene microservices framework及visual Node-Red programming environment,伴随着成长的社区论坛帮你开始创建你的应用。
担心MQTT协议如何在现实世界中执行?这里有一个很好证明:它为互联网中最大也是最忙的应用提供支持,这就是:Facebook‘s Messenger
本文来自:http://www.totcms.com/html/201508-7/20150807133726.htm