Centos7安装mqtt服务器(apache-artemis)从入门到应用

Cenos7安装mqtt服务器apache-artemis

  • MQTT服务器
    • 1、什么是MQTT
    • 2、MQTT协议的组成
      • 固定报文头(Fixed Header)
      • 可变报文头(Variable Header)
      • 有效负荷(Payload)
    • 3、MQTT消息
      • 消息类型(Message Type)
      • 消息质量(QoS)
      • MQTT安全性
    • 4、MQTT服务器种类
      • 云平台
      • 私人服务器
    • 5、MQTT客户机
    • 6、MQTT相对优势
      • MQTT与TCP/IP
      • MQTT与HTML
      • MQTT与XMPP
      • MQTT与CoAP
  • 安装apache-artemis
    • 1、下载源码
    • 2、安装java环境
    • 3、创建broker(经纪人)
    • 4、启动artemis服务
  • 测试MQTT服务

MQTT服务器

1、什么是MQTT

MQTT是message queuing telementry transport的简称,中文是消息队列遥测传输协议。
它是一种基于发布订阅模式的轻量级通讯协议,该协议构建于TCP/IP协议之上,由IBM在1999年发布。其最大的优点在于可以用极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。
作为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。

2、MQTT协议的组成

固定报文头(Fixed Header)

MQTT固定报文头最少有两个字节,第一字节包含消息类型(Message Type)和QoS级别等标志位。第二字节开始是剩余长度字段,该长度是后面的可变报文头加消息负载的总长度,该字段最多允许四个字节。

每个字节单独表示只能表示0-127的十进制数,为了表示大于127的数,需要使用多个字节,具体计算方法如下:
0xFF 0xFF 0x7F
127+128*(127+128*(127))=2,097,151
0xFF 0xFF 0xFF 0x7F
127+128*2097151=268,435,455‬‬
所以MQTT最多可携带256MB的信息数据。
Centos7安装mqtt服务器(apache-artemis)从入门到应用_第1张图片

可变报文头(Variable Header)

可变报文头主要包含协议名、协议版本、连接标志(Connect Flags)、心跳间隔时间(Keep Alive timer)、连接返回码(Connect Return Code)、主题名(Topic Name)等,后面会针对主要部分进行讲解。

有效负荷(Payload)

Payload直译为负荷,可能让人摸不着头脑,实际上可以理解为消息主体(body)。

当MQTT发送的消息类型是CONNECT(连接)、PUBLISH(发布)、SUBSCRIBE(订阅)、SUBACK(订阅确认)、UNSUBSCRIBE(取消订阅)时,则会带有负荷。

3、MQTT消息

消息类型(Message Type)

在固定报文头的第一字节,约定了消息的类型,其中MQTT支持14中不同的消息类型,如下图:
Centos7安装mqtt服务器(apache-artemis)从入门到应用_第2张图片

消息质量(QoS)

MQTT支持三种QoS,分别是0,1,2

QoS0表示最多发一次,意味着信息的可靠性比较差,但是可以隔段时间多次发送,适用于对信息次数不重要的消息。

QoS1表示最少发一次,意味着如果一条数据未接收到需要重复发送以确保收到,信息是可靠的,但是时延不确定。

QoS2表示要求只能发送一次,发送1次必须完成任务,适用于对次数敏感的消息。

MQTT安全性

MQTT是基于TCP/IP协议的明文传输,消息内容不被加密,可以使用抓包软件抓取。
作为传输协议,MQTT仅关注消息传输,提供合适的安全功能是开发者的责任。安全功能可以从三个层次来考虑——应用层、传输层、网络层。

  • 应用层:在应用层上,MQTT提供了客户标识(Client Identifier)以及用户名和密码,可以在应用层验证设备。
  • 传输层:类似于HTTPS,MQTT基于TCP连接,也可以加上一层TLS,传输层使用TLS加密是确保安全的一个好手段,可以防止中间人攻击。客户端证书不但可以作为设备的身份凭证,还可以用来验证设备。
  • 网络层:如果有条件的话,可以通过拉专线或者使用VPN来连接设备与MQTT代理,以提高网络传输的安全性。

MQTT支持两种认证方式:

  • 应用层:MQTT支持客户标识、用户名和密码认证;
    MQTT协议支持通过CONNECT消息的username和password字段发送用户名和密码。
    用户名及密码的认证使用起来非常方便,不过由于它们是以明文形式传输,所以使用抓包工具就可以轻易的获取。
    一般来说,使用客户标识、用户名和密码已经足够了,比如支持MQTT协议连接的OneNET云平台,就是使用了这三个字段作为认证。如果感觉还不够安全,还可以在传输层进行认证。
  • 传输层:传输层可以使用TLS,除了加密通讯,还可以使用X509证书来认证设备
    在传输层认证是这样的:MQTT代理在TLS握手成功之后可以继续发送客户端的X509证书来认证设备,如果设备不合法便可以中断连接。使用X509认证的好处是,在传输层就可以验证设备的合法性,在发送CONNECT消息之前便可以阻隔非法设备的连接,以节省后续不必要的资源浪费。而且,MQTT协议运行在使用TLS时,除了提供身份认证,还可以确保消息的完整性和保密性。

4、MQTT服务器种类

云平台

各大云平台都已经部署了MQTT服务,可以使用其服务。

私人服务器

可以在私人计算机上部署MQTT服务软件为其他设备提供MQTT服务。常用的MQTT服务软件有:

  • Apache-Apollo
  • EMQ
  • HiveMQ
  • Mosquitto

5、MQTT客户机

这里推荐eclipse家的paho.exe
百度云
提取码:y8ya

6、MQTT相对优势

MQTT与TCP/IP

基于TCP/IP的socket编程需要将超过最大报文长度的报文进行合理切片,而MQTT最大的消息可以达到256MB.

MQTT与HTML

他们都是明文传输,但是HTML设计之初就是为了传递HTML文件,是典型的C/S模式,而MQTT可以设计成多用户多设备的通讯,基于订阅和发布形式。

MQTT与XMPP

最有可能与MQTT竞争的是XMPP协议。XMPP(可扩展通讯与表示协议)是一项用于实时通讯的开放技术,它使用可扩展标记语言(XML)作为交换信息的基本格式。其优点是协议成熟、强大、可扩展性强。目前主要应用于许多聊天系统中,在消息推送领域,MQTT和XMPP互相竞争。下面列举MQTT与XMPP各自的特性

  • XMPP协议基于繁重的XML,报文体积大且交互繁琐;而MQTT协议固定报头只有两个字节,报文体积小、编解码容易;
  • XMPP基于JID的点对点消息传输;MQTT协议基于主题(Topic)发布\订阅模式,消息路由更为灵活;
  • XMPP协议采用XML承载报文,二进制必须进行Base64编码或其他方式处理;MQTT协议未定义报文内容格式,可以承载JSON、二进制等不同类型报文,开发者可以针对性的定义报文格式;
  • MQTT协议支持消息收发确认和QoS保证,有更好的消息可靠性保证;而XMPP主协议并未定义类似机制;
  • 在嵌入式设备开发中大多使用的是C语言开发,C语言解析XML是非常困难的。MQTT基于二进制实现且未定义报文内容格式,可以很好的兼顾嵌入式C语言开发者;而XMPP基于XML,开发者需要配合协议格式,不能灵活开发。

综上所述,在嵌入式设备中,由于需要一个灵巧简洁,对设备开发者和服务端开发者都友好的协议,MQTT比XMPP更具有优势。

MQTT与CoAP

CoAP也是一个能与MQTT竞争的协议。其模仿HTTP的REST模型,服务端以URI方式创建资源,客户端可以通过GET、PUT、POST、DELETE方式访问这些资源,并且协议风格也和HTTP极为相似,使用CoAP必须经过DataBase才能转给第三方。

安装apache-artemis

1、下载源码

artemis是Apache软件基金会的项目,国内下载最好通过开源镜像网站。这里提供清华镜像:

wget https://mirrors.tuna.tsinghua.edu.cn/apache/activemq/activemq-artemis/2.19.0/apache-artemis-2.19.0-bin.tar.gz --no-check-certificate

下载完成后进行解压

tar -zxvf apache-artemis-2.19.0-bin.tar.gz

将文件夹移动到 /opt 目录下

mv apache-artemis-2.19.0/ /opt/

2、安装java环境

首先检测是否已经安装java

java -version

没有安装的话,先下载java压缩包。这里推荐华为云的镜像:

wget https://repo.huaweicloud.com/java/jdk/8u171-b11/jdk-8u171-linux-x64.tar.gz

创建安装目录,并将压缩包解压到安装目录

mkdir /usr/local/java/
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/java/

打开/etc/profile文件

vi /etc/profile

在后面加入下面的代码,配置环境变量

export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

激活配置文件,再查看java版本则安装成功

source /etc/profile
java -version

3、创建broker(经纪人)

进入安装目录的 bin 目录

cd /opt/apache-artemis-2.19.0/bin/

创建broker和用户密码,角色,是否允许匿名,和创建位置

./artemis create --user admin --password admin --role admins --allow-anonymous true /opt/artemis

配置artemis

cd /opt/artemis/etc/

修改localhost为本机IP地址,从而使外部用户可以访问
vi bootstrap.xml
vi jolokia-access.xml

关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

4、启动artemis服务

输入启动命令:

/opt/artemis/bin/artemis run

Centos7安装mqtt服务器(apache-artemis)从入门到应用_第3张图片
出现上面的界面就是安装成功了。

测试MQTT服务

在两台安装了MQTT客户端的设备上连接MQTT服务器,输入服务器IP地址:1883,一台订阅test,另一台发布test主题的消息,发布之后,可以在订阅的设备上看到消息。
由此可以说明MQTT服务搭建成功。
发布设备:

订阅设备:
Centos7安装mqtt服务器(apache-artemis)从入门到应用_第4张图片

你可能感兴趣的:(物联网,服务器,apache,mqtt,物联网,iot)