热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搭建apollo_MacOS下搭建MQTT

一、关于MQTT1.MQTT简介MQTT(消息队列遥测传输)是ISO标准(ISOIECPRF20922)下基于发布订阅范式的消息协议。它工作在TCPIP协议族上,是为

一、关于MQTT

1. MQTT 简介

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。

IBM公司的安迪·斯坦福-克拉克及Cirrus Link公司的阿兰·尼普于1999年撰写了该协议的第一个版本。

该协议的可用性取决于该协议的使用环境。IBM公司在2013年就向结构化资讯标准促进组织提交了 MQTT 3.1 版规范,并附有相关章程,以确保只能对规范进行少量更改。MQTT-SN是针对非 TCP/IP 网络上的嵌入式设备主要协议的变种,与此类似的还有ZigBee协议。

纵观行业的发展历程,“MQTT”中的“MQ” 是来自于IBM的MQ系列消息队列产品线。然而通常队列本身不需要作为标准功能来支持。

可选协议包含了高级消息队列协议,面向文本的消息传递协议,互联网工程任务组约束应用协议,可扩展消息与存在协议,数据分发服务,OPC UA以及web 应用程序消息传递协议。

2. MQTT 特性

MQTT协议工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

  (1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

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

  (3)使用TCP/IP提供网络连接。

  (4)有三种消息发布服务质量:

  “至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次记录无所谓,因为不久后还会有第二次发送。

  “至少一次”,确保消息到达,但消息重复可能会发生。

“只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。

(5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。

3. MQTT 实现

实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

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

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

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


二、MQTT搭建

你可以通过各种途径对MQTT进行更细致的了解,这篇文章主要是介绍一下如何搭建MQTT。所以还等什么,让我们开始吧!

(1)安装JDK(如果已经安装过的朋友们可以忽略此步骤)

步骤1: -----下载:Java SE Development Kit 8 Downloads

下载地址:(如果失效了,大家自行百度~)

Java SE Development Kit 8​www.oracle.com
4da1ea20e8b4d4a0803608e3c643f07c.png

步骤2: ----- 安装完成JDK后,查看JAVAHOME的路径

cd /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home

b5b92df5fe1d8d5bb891f8c50cf25752.png

步骤3: -----配置环境变量

如果是第一次配置环境变量,可以使用“vim .bash_profile” 创建一个.bash_profile的隐藏配置文件(如果已存在配置文件,则直接添加配置信息即可)

vim ~/.bash_profile

添加以下配置信息添加到.bash_profile 文件中(这里注意 jdk1.8.0_171.jdk这个需要替换成你自己版本)

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH

f728c50136228715d3e0e5a3b5b857df.png

步骤4: -----使配置生效

source .bash_profile

步骤5: -----查看是否生效

java –version

如果成功会返回这个哦~

6ae264a3ef9e2ca7fb8bd10a6a4c0144.png

(2)下载Apollo

下载地址:(如果失效了,大家自行百度~)

Download​activemq.apache.org
de7fb5f1d969a06ec7fb58bc87befd0e.png
1084a7c97dbb2efcdf1616103ceba895.png

(3)安装

步骤1:将压缩包解压到~/Library/目录下

步骤2: -----定位到本地文件夹bin目录

cd ~/ Library/apache-apollo-1.7.1/bin

8d825e0adcb75e75da5a45c06ac1cd8b.png

步骤3: -----创建本地的MqttBroker文件夹

./apollo create MqttBroker

23dfde12c0076d09a840536ca3edb233.png

步骤4: -----定位到MqttBroker文件夹

cd MqttBroker/bin

c8248bbdd9742c812d2e6bcab556123d.png

步骤5: -----启动服务

启动服务可以使用 apollo-broker runapollo-broker-service start

apollo-broker run

486de0dab6b20391377fb3ae2393c8ad.png

步骤6: -----查看服务进程

ps axu | grep apollo

cdbb56ab072d4184886eddd61eef9e54.png

(4)登陆MQTT服务器,修改配置

步骤1: -----查看IP地址

ifconfig

05d5da495b9e59391d8cf859bdd0c78e.png

步骤2:

登录网页,并修改ip地址,以供局域网连接

在浏览器中http://127.0.0.1:61680/console/index.html#,初始用户名为admin,密码是password,打开之后,选择configration下

选择apollo.xml文件,修改属性为服务器ip,web_admin同步修改,以及tcp节点下,将默认的tcp://0.0.0.0:61613修改为服务器的IP,以供局域网使用。点击保存,即可在局域网内使用服务器的IP登录

226e1c1587788a0c243d2a9623a42208.png

以更改过后的服务器IP登录后,可查看如下信息。此IP在局域网其他客户端均可登录

3fe713029b144305e793218bdea3d452.png

至此我们搭建任务已经顺利完成!

在终端中control+c 就可以结束服务进程~


下面进行一个连接的小测试

三、MQTT服务器端与单客户端连接测试

步骤1:

在浏览器中输入服务器地址,打开服务器

步骤2:

打开Mqtt.fx软件,配置连接信息,点击Connect连接服务器

19c295782eae8ab96163416512b3410f.png

步骤3:

查看服务器状态,看见一个当前的connect

056dd749bc808f2d7e1beabca6deeac1.png

关于MQTT搭建以及连接测试到此结束啦~ 各位完成了吗?

如果途中有问题,请各位不要放弃。这个搭建还是很简单的。

根据出现的问题自行百度等~ 或者私信我~

后续会更新Android实现 MQTT 客户端,敬请期待~(请大佬勿喷)




推荐阅读
  • mysql自动打开文件_让docker中的mysql启动时自动执行sql文件
    本文提要本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动My ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 本文介绍了协程的概念和意义,以及使用greenlet、yield、asyncio、async/await等技术实现协程编程的方法。同时还介绍了事件循环的作用和使用方法,以及如何使用await关键字和Task对象来实现异步编程。最后还提供了一些快速上手的示例代码。 ... [详细]
author-avatar
赤血-魔鬼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有