使用Rabbitmq搭建MQTT 代理服务器(broker)

 

学习目标

  1. 理解RabbitMQ和MQTT的相关概念
  2. 使用RabbitMQ搭建MQTT服务器
  3. 掌握RabbitMQ服务器相关的配置
  4. 使用网上现有的软件工具对RabbitMQ服务器进行测试
  5. 阅读RabbitMQ客户端相关API文档并掌握基本调用
  6. 应用到项目中实现终端设备接收服务器端发送的指令,终端实时向服务器端反馈设备的状态。
  7. 相关连接
  • 相关概念
  1. MQTT

全称:Message Queuing Telemetry Transport,中文名,消息队列遥测传输,是基于发布/订阅的消息协议。

2.RabbitMQ

Rabbit公司使用Erlang语言开发的消息队列中间件。

3.Producer

生产者,将消息发送到Exchange

4.Consumer

消费者,从Queue中获取消息

5.Exchange

交换器,将从生产者接收到的消息路由到Queue

6.Queue

队列,存放供消费者消费的消息

7.Channel

信道,一旦 TCP 连接建立起来,客户端紧接着可以创建一个 AMQP 信道(Channel),每个信道都会被指派一个唯一的 ID。信道是为了得用连接Connection.

8.BindingKey

绑定键,建立Exchange与Queue之间的关系

9.RoutingKey

路由键,Producer发送消息与路由键给Exchange,Exchange将判断RoutingKey是否符合BindingKey,如何则将该消息路由到绑定的Queue

10.六种工作模式

 

简单模式:一个生产者,一个消费者

work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。

订阅模式:一个生产者发送的消息会被多个消费者获取。

路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由key

topic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词

 

  • 安装RabbitMQ服务器

*注意,做为一名专业的程序员,请不要将你的开发相关工具安装在带有空格的目录下,你可能会给自己挖坑。

(1) 安装RabbitMQ下载Downloading and Installing RabbitMQ — RabbitMQ

(2) RabbitMQ是用Erlang语言开发的,安装前提示先安装Erlang

 

(3)下载安装Erlang Erlang Programming Language

(4)再次安装RabbitMQ

a.开启后台管理界面

D:\RabbitMQ Server\rabbitmq_server-3.8.9\sbin>rabbitmq-plugins enable rabbitmq_management

打开后台验证,密码账号都为guest

http://localhost:15672/

b.开启MQTT插件

D:\RabbitMQ Server\rabbitmq_server-3.8.9\sbin>rabbitmq-plugins enable rabbitmq_mqtt

 

  • 配置RabbitMQ
  1. 创建用户

出于安全考虑,默认的guest账号,只能使用localhostt访问,不支持使用ip远程访问,登录管理后台,创建一个新的管理员账号就支持了。

[Admin]àAdd a user

2.给用户分配权限

【Admin】à点击要分配权限的用户名à进入权限分配界面,【set permission】是分配虚拟路径权限,【set topic permission】是用于分配exchange权限

3.删除用户

【Admin】-》【delete the user】

4.修改密码

【Admin】-》【update the user】

5.添加exchange

【exchanges】-》填写内容-》【Add exchange】

 

6.添加queue

【queues】-》填写内容-》【Add queue】

 

7.Bind Routing key

【exchanges】-》【Bindings】-》填写内容à【Bind】

 

  • Android端开发

请在github上下载官方demo,

https://github.com/eclipse/paho.mqtt.android

然后选择develop版本,或者直接下载我的,我的已经在本地修复好重新上传的。git clone https://gitee.com/senlinzhiwang/paho.mqtt.android.git

遇到坑,请参考我的另一篇博文:

https://blog.csdn.net/wwanglin_0/article/details/110523442

  • MQTT和AMQP的区别
  1. MQTT 协议 (低带宽)

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

MQTT 协议运行在 TCP/IP 或其他网络协议,提供有序、无损、双向连接。其特点包括:

1) 使用的发布 / 订阅消息模式,它提供了一对多消息分发,以实现与应用程序的解耦。

2) 对负载内容屏蔽的消息传输机制。

3) 对传输消息有三种服务质量 (QoS):

最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层 TCP/IP 网络。即:<=1 至多一次,这一级别会确保消息到达,但消息可能会重复。即:>=1

只有一次,确保消息只有一次到达。即:=1。在一些要求比较严格的计费系统中,可以使用此级别

4) 数据传输和协议交换的最小化 (协议头部只有 2 字节),以减少网络流量

5) 通知机制,异常中断时通知传输双方

适用范围:在低带宽、不可靠的网络下提供基于云平台的远程设备的数据传输和监控。

协议实现方式

实现 MQTT 协议需要:客户端和服务器端

MQTT 协议中有三种身份:发布者 (Publish)、代理 (Broker)(服务器)、订阅者 (Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT 传输的消息分为:主题 (Topic) 和负载 (payload) 两部分

Topic,可以理解为消息的类型,订阅者订阅 (Subscribe) 后,就会收到该主题的消息内容(payload)

payload,可以理解为消息的内容,是指订阅者具体要使用的内容

MQTT 协议一般适用于设备数据采集到端 (Device-ServerDevice-Gateway),集中星型网络架构 (hub-and-spoke),不适用设备与设备之间通信,设备控制能力弱,另外实时性较差,一般都在秒级。

  1. AMQP 协议 (互操作性)

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

AMQP 协议是一个二进制协议,拥有一些现代特点:多信道、协商式、异步、安全、跨平台、中立、高效。

AMQP 通常被划分为三层:

模型层定义了一套命令 (按功能分类),客户端应用可以利用这些命令来实现它的业务功能。

会话层负责将命令从客户端应用传递给服务器,再将服务器的应答传递给客户端应用,会话层为这个传递过程提供可靠性、同步机制和错误处理。

传输层提供帧处理、信道复用、错误检测和数据表示。

实现者可以将传输层替换成任意传输协议,只要不改变 AMQP 协议中与客户端应用程序相关的功能。实现者还可以使用其他高层协议中的会话层。

AMQP 协议最早应用于金融系统之间的交易消息传递,在物联网应用中,主要适用于移动手持设备与后台数据中心的通信和分析。

 

  • 相关连接

Java Client API Guide — RabbitMQ

RabbitMQ Java Client Library — RabbitMQ

Installing on Windows — RabbitMQ

Software (mqtt.org)

RabbitMQ » Blog Archive » MQTT Adapter - Messaging that just works

Eclipse Paho | projects.eclipse.org

eclipse/paho.mqtt.java: Eclipse Paho Java MQTT client library. Paho is an Eclipse IoT project. (github.com)

eclipse/paho.mqtt.android: MQTT Android (github.com)

Eclipse Paho | The Eclipse Foundation

org.eclipse.paho.android.service

paho.mqtt.android代码逐步分析(二) - Dovar_66的个人空间 - OSCHINA - 中文开源技术交流社区

Android消息推送MQTT实战 - 简书 (jianshu.com)

wildma/MqttAndroidClient: Android消息推送MQTT (github.com)

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值