MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?

简介

mqtt:一种通信协议,类似人类交谈中的汉语、英语、俄语中的一种语言规范
MQ:一种消息队列,也叫通信通道,类似人类交谈中的用电话、email、微信的一种通信方式
json:一种内容格式,就是数据打包的格式。

市面上的MQ产品很多,如阿里自研并开源RocketMQ,还有类似RabbitMQ、**ActiveMQ,**他们不管支持MQTT协议,还支持如AMQP、stomp协议等等,EMQ 使用的协议是mqtt。

只需要看本地MQTT服务器怎么配置的,目录里的二就够了。

到时候要用还是得部署到云MQTT服务器中。

文章目录

  • 简介
  • 前言
  • 一、MQTT简介
    • 1.MQTT控制报文格式
      • 1.1 固定报头 Fixed header
        • 1.1.1 MQTT控制报文的类型 MQTT Control Packet type
        • 1.1.2 标志 Flags
        • 1.1.3 剩余长度 Remaining Length
      • 1.2 可变报头 Variable header
      • 1.3 有效载荷 Payload
    • 2 抓包测试
      • 2.1 connect
      • 2.2 disconnect
      • 2.3 subscribe
      • 2.4 pubulish
      • 2.5 ping request (心跳帧)
      • 2.6 ping response (心跳帧)
  • 二、建立本地MQTT服务器(Broker)
    • 1.引入Apollo & ActiveMQ
    • 2.ActiveMQ的安装与配置
      • 2.1首先安装并配置JDK。
      • 2.2activemq安装配置
      • 2.3 activemq 的启动与访问
  • 总结
      • 参考


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、MQTT简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。 作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

场景:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

1.MQTT控制报文格式

MQTT控制报文由下面三部分组成:
MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第1张图片

1.1 固定报头 Fixed header

如下图所示,每个MQTT控制报文都包含一个固定报头。
在这里插入图片描述

1.1.1 MQTT控制报文的类型 MQTT Control Packet type

MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第2张图片

1.1.2 标志 Flags

MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第3张图片

1.1.3 剩余长度 Remaining Length

位置: 从第2个字节开始。 最长可达4字节。根据最高位判断后面字节是不是剩余长度。所以 4字节长度最大可以表示128128128*128Byte=256MB。

剩余长度(Remaining Length)是一个变长字节整数,用来表示当前控制报文剩余部分的字节数,包括可变报头和负载的数据。剩余长度不包括用于编码剩余长度字段本身的字节数。MQTT控制报文总长度等于固定报头的长度加上剩余长度。

1.2 可变报头 Variable header

某些 MQTT 控制报文包含一个可变报头部分。它在固定报头和有效载荷之间。可变报头的内容根据报文类型的不同而不同。可变报头的报文标识符(Packet Identifier)字段存在于在多个类型的报文里。

不多赘述

1.3 有效载荷 Payload

内容过多,详见下:
MQTT Version 3.1.1

2 抓包测试

只要能发送下面的报文,其实就够了。

连接;断连;订阅;发布;心跳帧。

2.1 connect

MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第4张图片

2.2 disconnect

MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第5张图片

2.3 subscribe

MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第6张图片

2.4 pubulish

MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第7张图片

2.5 ping request (心跳帧)

MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第8张图片

2.6 ping response (心跳帧)

MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第9张图片

二、建立本地MQTT服务器(Broker)

1.引入Apollo & ActiveMQ

Apollo已经没有了,网站上只能下载到ActiveMQ了,无所谓的,反正都是用。

ActiveMQ官网

Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。

2.ActiveMQ的安装与配置

2.1首先安装并配置JDK。

Ubuntu安装JDK

下载 => 解压 =>配置环境变量 =>使环境变量生效 =>查看java版本

2.2activemq安装配置

ubuntu下activeMQ安装与配置

下载 => 解压 =>运行 =>检查

2.3 activemq 的启动与访问

启动:bin文件目录下 ./activemq start
MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第10张图片

关闭: bin文件目录下 ./activemq stop

访问web端:
http://localhost:8161/admin/
or
http://127.0.0.1:8161/admin/

建立连接:
查找mqtt服务器IP与端口:
MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第11张图片

连接服务器:服务器IP就是你ACtivemq 安装的主机的IP
我这边是安装再虚拟机里的ubuntu里了。于是就是192.168.1.62:1883
端口号可以打开cfig文件夹中的activemq.xml来看。
里面有讲到各个协议走的端口号是什么,我们用到了MQTT 就看MQTT那一行就行。
MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第12张图片

MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第13张图片

用通信猫输入Ip:port 即可
MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第14张图片
ID可以随便填,除非ID冲突了;因为服务器没有对客户端做限制,所以账号密码可以随便填。
如果想试一下两个客户端中订阅/发布的过程,就开两个界面来试一下。
MQTT服务器与客户端?ubuntu下安装&配置ActiveMQ、Apollo?局域网内本地MQTT服务器?_第15张图片

这会应该换个ID,因为服务器中id是唯一索引,不能冲突。
如上图所示,两个客户端都连接到服务器,根据对方订阅的主题,发布消息,订阅方就会收到消息。

至此,MQTT本地的服务器端与客户端连接就介绍完了。后面估计会记录一下自己的客户端该怎么做。

真的要使用还是需要服务器挂到成熟的云MQTT服务器上。

总结

MQTT是个很方便的协议,开发阶段可以省时省力。

所以需要完整实现MQTT吗,简单的应用是不是只需要完成上面抓包的数据报就行。能够简化实现。

就像下面链接实现的。

基于STM32实现MQTT

参考

ubuntu下activeMQ安装与配置
Ubuntu16.04配置ActiveMQ

你可能感兴趣的:(计算机网络,物联网,linux,mqtt)