物联网常见协议之Amqp协议及使用场景解析

Posted 华为云开发者社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物联网常见协议之Amqp协议及使用场景解析相关的知识,希望对你有一定的参考价值。

摘要:本文围绕AMQP协议,为大家详细解析AMQP协议、核心技术亮点、多协议之间的对比以及使用实践。

本文分享自华为云社区《物联网常见协议之Amqp协议及使用场景解析》,作者:张俭。

引言

本文围绕AMQP协议,为大家详细解析AMQP协议、核心技术亮点、多协议之间的对比以及使用实践,并介绍华为云IoT通过Amqp协议如何为开发者和企业提供了更加灵活和高效的通信方式,使得物联网应用得以在各个领域得到更广泛的推广和应用。

AMQP协议,全称为Advanced Message Queuing Protocol。在2006年6月,由Cisco、Redhat、iMatrix等联合制定了AMQP的消息标准。

除了AMQP协议,还有一些其他协议如Mqtt(Message Queuing Telemetry Transport)、Http、Kafka。每个协议的发明/出现都是为了解决特定的问题。没有最合适的协议,只有更合适的业务场景。在后面我们也会对这些协议进行简单的对比。

Amqp历史上大概有如下四个版本,

  • Amqp 0-8: 发布于2006年
  • Amqp 0-9-1:发布于2008年,是Amqp 0-8的改进版,被广泛应用,如rabbitmq、qpid等
  • Amqp 0-10:发布于2008年,是Amqp 0-9-1的改进,未被广泛使用
  • Amqp 1.0:发布于2011年,是Amqp协议的下一代标准,与之前的版本不兼容,但提供了更强大的特性和更好的性能。目前也在华为云IoT、Azure中有应用起来。包括rabbitmq、qpid等也提供了对Amqp1.0版本协议的支持

我们也会主要讨论Amqp 0-9-1 和 Amqp 1.0这两个版本

Amqp 0-9-1 协议简述

核心概念

  • Virtual Host:简称vhost,个人理解是Amqp协议上的多租,每个vhost具有自己的Exchanges、Message Queues等,互相不干扰。
  • Exchange: 从生产者应用程序中接收消息,并根据特定的情况(消息属性或内容),将这些消息路由到“Message Queue”中
  • Message Queue: 消息队列,存储消息,直到它被消费者应用程序安全地处理
  • Binding:指Exchange将何种类型的消息发送到Queue中,提供消息路由机制

Amqp 0-9-1 协议是一个 多链路、协商的、异步、安全、可移植、高效的协议。Amqp协议通常分为两层:

+------------------Functional Layer----------------+
| Basic Transactions Exchanges Message queues     |
+--------------------------------------------------+
+------------------Transport Layer-----------------+
| Framing Content Data representation             |
| Error handling Heart-beating Channels |
+--------------------------------------------------+

此外,由于Amqp协议的message queue支持许多特性:私有或共享、持久化或临时等等。根据不同的属性设定,我们可将AMQP用于许多应用场景,例如

  • 消息中间件使用:共享的存储转发队列,保存消息并交给多个消费者消费
  • RPC使用:通过将队列设定为临时的,带有IP地址的,来模拟RPC接口

Amqp 0-9-1 生产时序图

Amqp 0-9-1 消费时序图

Amqp 0-9-1 协议帧及数据类型

Amqp 0-9-1的协议帧由 FrameHeader、Payload、FrameEnd组成

  • Integers 整数(1到8个字节):用于表示大小、数量、限制等。整数总是无符号的,
  • Bits 位:用于表示开/关值,一个八位字节。
  • Short strings 短字符串:用于存储短文本属性。短字符串长度限制为255个八位字节。
  • Long strings 长字符串:用于存储二进制数据块。
  • Field tables 字段表:存储名称-值对。字段值可以是字符串、整数等类型。

Amqp 1-0协议

与Amqp 0-9-1的差异

协议设计层面:

  • AMQP 0-9-1:此版本的 AMQP 主要针对代理的设计,涵盖了消息传递模型、代理行为和交互模式。0-9-1 版本的协议与代理的实现紧密耦合。
  • AMQP 1.0:此版本的 AMQP 更注重基于互操作性的通信协议,不依赖于特定的代理实现。AMQP 1.0 关注点在于在发送者和接收者之间传输消息,而不是代理的内部行为。
  • 比如像”Queue Declare”、“Queue Delete”、“Queue Query”这些在Amqp 0-9-1支持的命令,在Amqp1.0中都被移除,并假设这些功能会在更高层(broker)参加。

对称层面:

  • Amqp 0-9-1 是一个典型的客户端/服务器通信协议。
  • Amqp 1.0 则是一个对称的协议,任何一端都可以注册为sender或是receiver,并且从如下Amqp 0.9.1和1.0之间的时序图对比也可以看出来。Amqp 1.0是完全双工的协议。从某种程度或者说网络编程的角度来说,实现的难度更大。

Amqp 1-0 鉴权时序图

Amqp 1-0 生产时序图

Amqp 1-0 消费时序图

Amqp 1.0 协议帧介绍

Amqp1.0 的协议帧由FrameHeader、ExtendedHeader、FrameBody组成。

  • FrameHeader 8个字节大小,包含长度、类型信息等
  • Extended header 可变宽度区域
  • FrameBody 是一个可变宽度的字节序列,其格式取决于帧类型

FrameHeader介绍

  • Size: FrameHeader的第0~3个字节包含帧大小。无符号的32位整数,为FrameHeader、ExtendedHeader、FrameBody的总和大小。如果大小小于8字节,则格式错误
  • DOFF: FrameHeader的第4个字节,这表示帧内Body的位置。
  • Type: FrameHeader的第5个字节,类型代码表示帧的格式和目的。根据帧的类型,帧头中的后续字节可能会被不同地解释。类型代码0x00表示该帧是AMQP帧。类型代码0x01表示该帧是SASL帧等。

Amqp 帧介绍

Amqp帧类型代码为0x00。对于Amqp帧来说,FrameHeader的第6字节和第7字节表示channel的编号。Frame Body 被定义为一个 performative 后跟一个不透明的 payload。表现形式必须是第open、begin、attach、flow、transfer、disposition、detach、end、close中定义的一个,并在AMQP类型系统中编码为描述的类型。帧体中剩余的字节构成了该帧的 payload。payload 的存在和格式由给定表现形式的语义定义。

SASL 帧介绍

Sasl帧类型代码为0x01。FrameHeader中的第6和第7字节应该被忽略。也不存在扩展头。所以DOFF固定位0x02。

与其他消息通信协议间的对比

Amqp与Mqtt的对比

Amqp和Mqtt都是应用层的消息传递协议,mqtt更加轻量,相对来说概念不如amqp那么丰富,同时mqtt头部消息更加短小。更加适用于低带宽、功耗较低的物联网设备

Amqp与Kafka协议的对比

AMQP是一种非常灵活的协议,可以用于各种类型的消息传递场景,包括点对点和发布-订阅模型。Kafka则专注于高吞吐量的流式处理,适用于数据管道和流式处理等场景。

Kafka的设计旨在提供高吞吐量和低延迟。AMQP的性能因实现和使用情况而异,但在大多数情况下,它的性能不如Kafka。

Kafka拥有强大的生态系统,包括流处理、数据湖、消息队列等多个应用场景。AMQP也有相应的生态系统和工具,但相对来说要小得多。

总得来说,尽管kafka存在性能上的优势,但kafka broker很难对外暴露。相较于kafka这种私有消息中间件协议,Amqp足够标准,更适合各种异构系统的对接。

AMQP协议相关的开源项目

rabbitmq

提到AMQP,就不得不提rabbitmq。RabbitMQ 是一个开源的消息代理和队列服务器,用于通过高级消息队列协议(AMQP)在分布式系统中实现消息传递。RabbitMQ 提供了一个可靠、高性能、可扩展和易于使用的消息传递平台,支持多种编程语言和平台。它最初是用 Erlang 语言编写的,因此具有良好的并发性能和容错能力。

所谓成也erlang,败也erlang,由于erlang语言生态的问题,有能力深入维护Rabbitmq的人员并不是很多,也是rabbitmq越来越不流行的一个原因。

Qpid

Apache Qpid(Quick Platform for Interactive Distributed Messaging)是一个开源的消息传递系统,它实现了高级消息队列协议(Advanced Message Queuing Protocol,AMQP)的多种版本。AMQP 是一种开放标准的应用层协议,用于消息传递的中间件,它可以实现跨平台、跨语言的消息通信。Qpid 项目的主要目标是提供一个可靠、可扩展和高性能的消息传递平台,帮助开发者更容易地构建分布式系统。主要的组件有

  • Qpid Broker:一个高性能、可扩展的AMQP消息代理,支持持久化、事务和安全认证等特性。Qpid Broker 提供了Java和C++两种实现。
  • Qpid Proton:一个轻量级的AMQP库,旨在为各种编程语言提供高性能的AMQP实现,提供了C和java的默认实现。此外Proton 还提供了其他编程语言如python的绑定。

但Qpid总得来说,比较重型,如果仅仅是想在原有的消息组件,如kafka/pulsar外面叠加一层Amqp可访问的能力,我相信proton是更好的选择。

Vertx-proton

Vert.x Proton 的目标是结合 Vert.x 的响应式编程模型和 Qpid Proton 的 AMQP 支持,以简化构建高性能、可扩展的、基于 AMQP 的分布式应用程序。Vert.x Proton 提供了一套简洁、易用的 API,可以让开发者在 Vert.x 应用程序中轻松地实现 AMQP 通信。

华为云IoT对AMQP的支持

在最初阶段华为云IoTDA主要支持HTTP协议,尽管这种方式已经能满足许多需求,但随着物联网技术的普及和发展,用户对于更加灵活和高效的通信方式的需求逐渐增强,华为云IoTDA逐渐丰富协议库,当前支持60+协议接入,为开发者和企业提供更加完善的解决方案。

在IoT应用对接场景中,华为云IoT现已新增了对AMQP的支持,与HTTP协议相比,AMQP协议具有以下优势

  1. 无需HTTP服务器:AMQP协议无需开发者搭建HTTP服务器,降低了项目成本,简化了系统架构。可以部署在各种类型的设备,包括手机、平板、智能家居设备等,进一步拓宽了物联网应用的领域。
  2. 低延迟、高效率:AMQP协议采用二进制传输,降低了数据传输所需的带宽,提高了传输速度,降低了延迟。
  3. 强大的消息队列功能:AMQP协议具有优秀的消息队列功能,支持点对点和发布订阅模式,确保消息的可靠传输和顺序处理。

通过支持AMQP协议,华为云IoT为开发者和企业提供了更加灵活和高效的通信方式,使得物联网应用得以在各个领域得到更广泛的推广和应用。

Amqp实战:使用qpid-proton python 消费华为云IoTDA的Amqp消息

首先通过pip 安装依赖包

pip install python-qpid-proton

最简单的消费者demo, consumer.py如下

import sys
from proton.handlers import MessagingHandler
from proton.reactor import Container
class AMQPConsumer(MessagingHandler):
 def __init__(self, server_url, target_address):
 super(AMQPConsumer, self).__init__()
 self.server_url = server_url
 self.target_address = target_address
 def on_start(self, event):
        conn = event.container.connect(self.server_url)
 event.container.create_receiver(conn, self.target_address)
 def on_message(self, event):
 print(f"Received message: event.message.body")
 event.connection.close()
if __name__ == "__main__":
 server_url = "amqp://localhost:5672"
 target_address = "example_queue"
 try:
 Container(AMQPConsumer(server_url, target_address)).run()
 except KeyboardInterrupt:
 sys.exit(0)

我们可以使用这个producer.py验证 consumer.py可用

import sys
from proton import Message
from proton.handlers import MessagingHandler
from proton.reactor import Container
class AMQPProducer(MessagingHandler):
 def __init__(self, server_url, target_address, message_body):
 super(AMQPProducer, self).__init__()
 self.server_url = server_url
 self.target_address = target_address
 self.message_body = message_body
 def on_start(self, event):
        conn = event.container.connect(self.server_url)
 self.sender = event.container.create_sender(conn, self.target_address)
 def on_sendable(self, event):
        message = Message(body=self.message_body)
 event.sender.send(message)
 print(f"Sent message: message.body")
 event.connection.close()
if __name__ == "__main__":
 server_url = "amqp://localhost:5672"
 target_address = "example_queue"
 message_body = "Hello, AMQP 1.0!"
 try:
 Container(AMQPProducer(server_url, target_address, message_body)).run()
 except KeyboardInterrupt:
 sys.exit(0)

为了能连接上华为云IoTDA的Amqp接入点,我们还需要给consumer.py配置用户名、密码。如下为样例代码,具体连接的信息、凭据如何获得可参考: https://support.huaweicloud.com/devg-iothub/iot_01_00100_2.html。注意,url也从amqp修改为了amqps

import sys
from proton import Message, SSLDomain
from proton.handlers import MessagingHandler
from proton.reactor import Container
class AMQPConsumer(MessagingHandler):
 def __init__(self, server_url, target_address, username, password, cert_file, key_file):
 super(AMQPConsumer, self).__init__()
 self.server_url = server_url
 self.target_address = target_address
 self.username = username
 self.password = password
 self.cert_file = cert_file
 self.key_file = key_file
 def on_start(self, event):
 ssl_domain = SSLDomain(mode=SSLDomain.MODE_CLIENT)
 ssl_domain.set_credentials(self.cert_file, self.key_file, None)
        conn = event.container.connect(self.server_url, user=self.username, password=self.password, ssl_domain=ssl_domain)
 event.container.create_receiver(conn, self.target_address)
 def on_message(self, event):
 print(f"Received message: event.message.body")
 event.connection.close()
if __name__ == "__main__":
 server_url = "amqps://localhost:5671" # 注意 \'amqps\',它表示使用 SSL/TLS 连接
 target_address = "example_queue"
    username = "your_username"
    password = "your_password"
 cert_file = "path/to/your/certificate.pem"
 key_file = "path/to/your/private_key.pem"
 try:
 Container(AMQPConsumer(server_url, target_address, username, password, cert_file, key_file)).run()
 except KeyboardInterrupt:
 sys.exit(0)

该样例代码已上传到gitee

总结与展望

总体来说,AMQP作为一种应用层协议,在消息传递和异构系统之间的通信方面提供了非常灵活和可靠的解决方案。与其他消息传递协议相比,AMQP具有丰富的功能和灵活的设计,适用于各种类型的消息传递场景。

在使用AMQP时,我们可以选择现有的开源实现,如RabbitMQ、Qpid等,也可以自行实现AMQP的相关组件。通过这些实现,我们可以轻松地在不同的应用程序、语言和平台之间进行消息传递,并实现可靠、高效、安全的通信。

随着物联网、云计算和大数据等技术的发展,AMQP的应用场景越来越广泛,比如在IoT设备、大数据流处理、分布式系统等方面都得到了广泛应用。未来,AMQP将继续发挥重要作用,推动各种异构系统之间的互联互通,带来更加便捷和高效的消息传递体验。

 

点击关注,第一时间了解华为云新鲜技术~

嵌入式物联网常见通信协议

本文介绍一些常见的嵌入式、物联网通信协议,它们具有不同的性能、通信速率、覆盖范围、功率和内存,而且每一种协议都有各自的优点和或多或少的缺点。

其中一些通信协议只适合小型家用电器,而其他一些通信协议则可以用于大型智慧城市项目。物联网通信协议分为两大类:

  • 一类是接入协议:一般负责子网内设备间的组网及通信

  • 一类是通讯协议:主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通信。

物理层、数据链路层协议

1、远距离蜂窝通信

(1)2G/3G/4G通信协议,分别指第二、三、四代移动通信系统协议。

(2)NB-IoT

窄带物联网(Narrow Band Internet of Things, NB-IoT)成为万物互联网络的一个重要分支。NB-IoT构建于蜂窝网络,只消耗大约180kHz的带宽,可直接部署于GSM网络、UMTS网络或LTE网络,以降低部署成本、实现平滑升级。NB-IoT聚焦于低功耗广覆盖(LPWA)物联网(IoT)市场,是一种可在全球范围内广泛应用的新兴技术。具有覆盖广、连接多、速率快、成本低、功耗低、架构优等特点。

应用场景:NB-IoT网络带来的场景应用包括智能停车、智能消防、智能水务、智能路灯、共享单车和智能家电等。

(3)5G

第五代移动通信技术,是最新一代蜂窝移动通信技术。5G的性能目标是高数据速率、减少延迟、节省能源、降低成本、提高系统容量和大规模设备连接。

应用场景:AR/VR、车联网、智能制造、智慧能源、无线医疗、无线家庭娱乐、联网无人机、超高清/全景直播、个人AI辅助、智慧城市。

2、远距离非蜂窝通信

(1)WiFi

由于前几年家用WiFi路由器以及智能手机的迅速普及,WiFi协议在智能家居领域也得到了广泛应用。WiFi协议最大的优势是可以直接接入互联网。相对于ZigBee,采用Wifi协议的智能家居方案省去了额外的网关,相对于蓝牙协议,省去了对手机等移动终端的依赖。

商用WiFi在城市公共交通、商场等公共场所的覆盖,将商用WiFi的场景应用潜力表露无疑。

(2)ZigBee

ZigBee是一种低速短距离传输的无线通信协议,是一种高可靠的无线数传网络,主要特色有低速、低耗电、低成本、支持大量网上节点、支持多种网上拓扑、低复杂度、快速、可靠、安全。ZigBee技术是一种新型技术,它最近出现,主要是依靠无线网络进行传输,它能够近距离的进行无线连接,属于无线网络通讯技术。

ZigBee技术的先天性优势,使得它在物联网行业逐渐成为一个主流技术,在工业、农业、智能 家居等领域得到大规模的应用。

(3)LoRa

LoRa™(LongRange,远距离)是一种调制技术,与同类技术相比,提供更远的通信距离。LoRa 网关、烟感、水监测、红外探测、定位、排插等广泛应用物联网产品。作为一种窄带无线技术,LoRa 是使用到达时间差来实现地理定位的。LoRa 定位的应用场景:智慧城市和交通监控、计量和物流、农业定位监控。

3、近距离通信

(1)RFID

射频识别(RFID)是 Radio Frequency Identification 的缩写。其原理为阅读器与标签之间进行非接触式的数据通信,达到识别目标的目的。RFID 的应用非常广泛,典型应用有动物晶片、汽车晶片防盗器、门禁管制、停车场管制、生产线自动化、物料管理。完整的RFID系统由读写器(Reader)、电子标签(Tag)和数据管理系统三部分组成。

(2)NFC

NFC的中文全称为近场通信技术。NFC是在非接触式射频识别(RFID)技术的基础上,结合无线互连技术研发而成,它为我们日常生活中越来越普及的各种电子产品提供了一种十分安全快捷的通信方式。NFC中文名称中的“近场”是指临近电磁场的无线电波。

应用场景:应用在门禁、考勤、访客、会议签到、巡更等领域。NFC具有人机交互、机器间交互等功能。

(3)Bluetooth

蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。

蓝牙能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。

4、有线通信

(1)USB

USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。

(2)串口通信协议

串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。

串口通信是指外设和计算机间,通过数据线按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。大多数计算机(不包括笔记本)都包含两个RS-232串口。串口通信也是仪表仪器设备常用的通信协议。

(3)以太网

以太网是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。

(4)MBus

MBus 远程抄表系统(symphonic mbus),是欧洲标准的2线的二总线, 主要用于消耗测量仪器诸如热表和水表系列。

网络层、传输协议

1、IPv 4

互联网通信协议第四版,是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署的版本。IPv4是互联网的核心,也是使用最广泛的网际协议版本

2、IPv6

互联网协议第6版,由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍

3、TCP

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。

4、6LoWPAN

6LoWPAN是一种基于IPv6的低速无线个域网标准,即IPv6 over IEEE 802.15.4。

应用层协议

1、MQTT协议

MQTT (Message Queue Telemetry Transport),翻译成中文就是,遥测传输协议,其主要提供了订阅/发布两种消息模式,更为简约、轻量,易于使用,特别适合于受限环境(带宽低、网络延迟高、网络通信不稳定)的消息分发,属于物联网(Internet of Thing)的一个标准传输协议。

在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

2、CoAP协议

CoAP(Constrained Application Protocol)是一种在物联网世界的类Web协议,适用于需要通过标准互联网网络进行远程控制或监控的小型低功率传感器,开关,阀门和类似的组件,服务器对不支持的类型可以不响应

3、REST/HTTP协议

RESTful是一种基于资源的软件架构风格。所谓资源,就是网络上的一个实体,或者说是网络上的一个具体信息。一张图片、一首歌曲都是一个资源。RESTful API是基于HTTP协议的一种实现。(HTTP是一个应用层的协议,特点是简捷 快速)。

满足Rest规范的应用程序或设计就是RESTful,根据Rest规范设计的API,就叫做RESTful API

4、DDS协议

DDS(Data Distribution Service)分布式实时数据分发服务中间件协议,它是分布式实时网络里的“TCP/IP”,用来解决实时网络中的网络协议互联,其作用相当于“总线上的总线”。

5、AMQP协议

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。

6、XMPP协议

XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。

通信协议比较

1、NB-IoT协议和LoRa协议比较

第一,频段。LoRa工作在1GHz以下的非授权频段,在应用时不需要额外付费,NB-IoT和蜂窝通信使用1GHz以下的频段是2113授权的,是需要收费的。

第二,电池供电寿命。LoRa模块在处理干扰、网络5261重迭、可伸缩性等方面具有独特的特性,但却不能提供像蜂窝协议一样的服务质量4102。NB-IoT出于对服务质量的考虑,不能提供类似LoRa一样的电池寿命。

第三,设备成本。对终端节点来说,LoRa协议比NB-IoT更简单,更容易开发并且1653对于微处理器的适用和兼容性更好。同时低成本、技术相对成熟的LoRa模块已经可以在市场上找到了,并且还会有升级版本陆续出来。

第四,网络覆盖和部署时间表。NB-IoT标准在2016年公布,除回网络部署之外,相应的商业化和产业链的建立还需要更长的时间和努力去探索。LoRa的整个产业链相对已经较为成熟了,产品也处于“蓄势待答发”的状态,同时全球很多国家正在进行或者已经完成了全国性的网络部署。

2、蓝牙、WiFi、ZigBee协议比较

目前来说,WiFi的优势是应用广泛,已经普及到千家万户;ZigBee的优势是低功耗和自组网;UWB无载波无线通信技术的优势是传输速率;蓝牙的优势组网简单。然而,这3种技术,也都有各自的不足,没有一种技术能完全满足智能家居的全部要求。

蓝牙技术的出现使得短距离无线通信成为可能,但其协议较复杂、功耗高、成本高等特点不太适用于要求低成本、低功耗的工业控制和家庭网络。尤其蓝牙最大的障碍在于传输范围受限,一般有效的范围在10米左右,抗干扰能力不强、信息安全问题等问题也是制约其进一步发展和大规模应用的主要因素。

WiFi也是是一种短距离无线传输技术,可以随时接入无线信号,移动性强,比较适合在办公室及家庭的环境下应用。当然WiFi也存在一个致命缺点。由于WiFi采用的是射频技术,通过空气发送和接收数据,使用无线电波传输数据信号,比较容易受到外界的干扰。

ZigBee则是国际通行的无线通讯技术,它的每个网络端口可以最多接入6.5万多个端口,适合家居、工业、农业等多个领域使用,而蓝牙和WiFi网端只能接入10个端口,显然不能适应家庭需要。ZigBee还具有低功耗和低成本优势。

3、MQTT协议和CoAP协议比较

MQTT是多对多通讯协议用于在不同客户端之间通过中间代理传送消息,解耦生产者与消费者,通过使得客户端发布,让代理决定路由并且拷贝消息。虽然MQTT支持一些持久化,最好还是作为实时数据通讯总线。

CoAP主要是一个点对点协议,用于在客户端与服务器之间传输状态信息。虽然支持观察资源,CoAP最好适合状态传输模型,不是完全基于事件。

MQTT客户端建立长连接TCP,这通常表示没有问题,CoAP客户端与服务器都发送与接收UDP数据包,在NAT环境中,隧道或者端口转发可以用于允许CoAP,或者像LWM2M,设备也许会先初始化前端连接。

MQTT不提供支持消息打类型标记或者其他元数据帮助客户端理解,MQTT消息可用于任何目的,但是所有的客户端必须知道向上的数据格式以允许通讯,CoAP,相反地,提供内置支持内容协商与发现,允许设备相互探测以找到交换数据的方式。

两种协议各有优缺点,选择合适的取决于自己的应用。

以上是关于物联网常见协议之Amqp协议及使用场景解析的主要内容,如果未能解决你的问题,请参考以下文章

海鑫智圣:物联网漫谈之MQTT协议

嵌入式物联网常见通信协议

2022-02-17 WPF上位机 120-三菱PLC协议之读写方法流程解析

2021-12-20 WPF上位机 113-欧姆龙协议之读写方法流程解析

2021-12-03 WPF上位机 105-西门子S7协议之启动,停止方法流程解析

2021-12-03 WPF上位机 104-西门子S7协议之写数据方法流程解析