千家信息网

如何在Docker中安装MQTT

发表于:2024-10-04 作者:千家信息网编辑
千家信息网最后更新 2024年10月04日,这篇文章将为大家详细讲解有关如何在Docker中安装MQTT,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MQTT简介MQTT(Message Que
千家信息网最后更新 2024年10月04日如何在Docker中安装MQTT

这篇文章将为大家详细讲解有关如何在Docker中安装MQTT,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

MQTT简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。

Docker安装RabbitMQ配置MQTT

使用RabbitMQ作为MQTT服务端,Eclipse Paho作为客户端。宿主机系统为ubuntu16.04

Docker下载镜像

docker pull daocloud.io/library/rabbitmq:3.7.4

启动RabbitMQ

docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 -p 1883:1883 -p 15675:15675 daocloud.io/library/rabbitmq:3.7.4

注意映射容器端口

  • 15672 是rabbitmq management管理界面默认访问端口

  • 5672 是amqp默认端口

  • 1883 是mqtt tcp协议默认端口

  • 15675 是web_mqtt websocket协议默认端口

启用插件

默认安装后我们需要手动开启rabbitmq_management插件,rabbitmq_mqtt插件和rabbitmq_web_mqtt插件。

执行如下三条命令

docker exec <容器ID> rabbitmq-plugins enable rabbitmq_managementdocker exec <容器ID> rabbitmq-plugins enable rabbitmq_mqttdocker exec <容器ID> rabbitmq-plugins enable rabbitmq_web_mqtt

当然你也可以写个脚本start.sh,复制到容器中

/usr/sbin/rabbitmq-plugins enable rabbitmq_management/usr/sbin/rabbitmq-plugins enable rabbitmq_mqtt/usr/sbin/rabbitmq-plugins enable rabbitmq_web_mqtt

进入容器执行这个脚本。

sh start.sh

开放宿主机端口

firewall-cmd --zone=public --add-port=15672/tcp --permanentfirewall-cmd --zone=public --add-port=5672/tcp --permanentfirewall-cmd --zone=public --add-port=1883/tcp --permanentfirewall-cmd --zone=public --add-port=15675/tcp --permanentfirewall-cmd --reload

Python MQTT客户端实现

安装python包

pip install paho-mqtt

发送数据demo(消费者)

# 使用前需要启动hbase和thrift服务器# 启动hbase在cd /usr/local/hbase下bin/start-hbase.sh  默认端口为 60000# 启动thrift服务器cd /usr/local/hbase/bin执行./hbase-daemon.sh start thrift  默认端口为9090import sysimport osdir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'sys.path.append(dir_common)  # 将根目录添加到系统目录,才能正常引用common文件夹import argparse  #import loggingimport time,datetimefrom common.py_log import init_logger,init_console_loggerfrom common.config import *from common.py_hbase import PyHbaseimport time,jsonfrom common.py_rabbit import Rabbit_Consumerimport paho.mqtt.client as mqttimport timeHOST = "192.168.2.46"PORT = 1883def client_loop():  client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))  client = mqtt.Client(client_id)  # ClientId不能重复,所以使用当前时间  client.username_pw_set("guest", "guest") # 必须设置,否则会返回「Connected with result code 4」  client.on_connect = on_connect  client.on_message = on_message  client.connect(HOST, PORT, 60)  client.loop_forever()def on_connect(client, userdata, flags, rc):  print("Connected with result code "+str(rc))  client.subscribe("test")def on_message(client, userdata, msg):  print(msg.topic+" "+msg.payload.decode("utf-8"))if __name__ == '__main__':  client_loop()

接收数据demo(生产者)

import sysimport osdir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'sys.path.append(dir_common)  # 将根目录添加到系统目录,才能正常引用common文件夹import paho.mqtt.client as mqttimport timeHOST = "192.168.2.46"PORT = 1883def client_loop():  client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))  client = mqtt.Client(client_id)  # ClientId不能重复,所以使用当前时间  client.username_pw_set("guest", "guest") # 必须设置,否则会返回「Connected with result code 4」  client.on_connect = on_connect  client.on_message = on_message  client.connect(HOST, PORT, 60)  client.loop_forever()def on_connect(client, userdata, flags, rc):  print("Connected with result code "+str(rc))  client.subscribe("test")def on_message(client, userdata, msg):  print(msg.topic+" "+msg.payload.decode("utf-8"))if __name__ == '__main__':  client_loop()

生产者demo

# import paho.mqtt.client as mqttimport paho.mqtt.publish as publishimport timeHOST = "192.168.2.46"PORT = 1883def on_connect(client, userdata, flags, rc):  print("Connected with result code "+str(rc))  client.subscribe("test")def on_message(client, userdata, msg):  print(msg.topic+" "+msg.payload.decode("utf-8"))if __name__ == '__main__':  client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))  # client = mqtt.Client(client_id)  # ClientId不能重复,所以使用当前时间  # client.username_pw_set("guest", "guest") # 必须设置,否则会返回「Connected with result code 4」  # client.on_connect = on_connect  # client.on_message = on_message  # client.connect(HOST, PORT, 60)  # client.publish("test", "你好 MQTT", qos=0, retain=False) # 发布消息  publish.single("test", "你好 MQTT", qos = 1,hostname=HOST,port=PORT, client_id=client

关于如何在Docker中安装MQTT就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

端口 插件 容器 时间 系统 utf-8 服务 中安 你好 内容 客户 客户端 宿主 宿主机 数据 文件 文件夹 文章 更多 服务器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全法2021年是第几届 高级网络安全工程师培训 网络安全知识竞赛app素材 网络安全的预算内容有哪些 数据通信网络技术网络层校验 上网商城数据库表结构 每个传感器的数据库 21网络安全知识宣传周 怎样只删除一列数据库 数据库的两个表怎么链接在一块 互联网络安全教的手抄报 小学网络安全的画 速成网络技术 网络安全知识投稿 计算机网络技术有前景嘛 安全配置和分析打开数据库 上海服务器续保调试 广元软件开发销售公司 网络安全相关管理部门有哪些 房源库网络技术有限公司 宁波网络安全宣传工作 南京软件开发定制多少钱 火河科技智能门锁服务器异常 北京市点我网络技术有限公司 成都工控软件开发多少钱 计算机网络技术自问自答 数据库备份通常可采取 修改数据库密码的命令是什么 云服务器租用流程戏盒子 软件开发新高考应选什么科
0