• 售前

  • 售后

热门帖子
入门百科

Docker MQTT安装使用教程

[复制链接]
瑞星卡卡卡卫 显示全部楼层 发表于 2021-10-25 19:31:29 |阅读模式 打印 上一主题 下一主题
MQTT简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有大概成为物联网的紧张组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部毗连起来,被用来当做传感器和制动器(好比通过Twitter让房屋联网)的通讯协议。
Docker安装RabbitMQ设置MQTT
利用RabbitMQ作为MQTT服务端,Eclipse Paho作为客户端。宿主机体系为ubuntu16.04
Docker下载镜像
  1. docker pull daocloud.io/library/rabbitmq:3.7.4
复制代码
启动RabbitMQ
  1. 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插件。
执行如下三条下令
  1. docker exec <容器ID> rabbitmq-plugins enable rabbitmq_management
  2. docker exec <容器ID> rabbitmq-plugins enable rabbitmq_mqtt
  3. docker exec <容器ID> rabbitmq-plugins enable rabbitmq_web_mqtt
复制代码
当然你也可以写个脚本start.sh,复制到容器中
  1. /usr/sbin/rabbitmq-plugins enable rabbitmq_management
  2. /usr/sbin/rabbitmq-plugins enable rabbitmq_mqtt
  3. /usr/sbin/rabbitmq-plugins enable rabbitmq_web_mqtt
复制代码
进入容器执行这个脚本。
  1. sh start.sh
复制代码
开放宿主机端口
  1. firewall-cmd --zone=public --add-port=15672/tcp --permanent
  2. firewall-cmd --zone=public --add-port=5672/tcp --permanent
  3. firewall-cmd --zone=public --add-port=1883/tcp --permanent
  4. firewall-cmd --zone=public --add-port=15675/tcp --permanent
  5. firewall-cmd --reload
复制代码
Python MQTT客户端实现
安装python包
  1. pip install paho-mqtt
复制代码
发送数据demo(消费者)
  1. # 使用前需要启动hbase和thrift服务器
  2. # 启动hbase在cd /usr/local/hbase下bin/start-hbase.sh  默认端口为 60000
  3. # 启动thrift服务器cd /usr/local/hbase/bin执行./hbase-daemon.sh start thrift  默认端口为9090
  4. import sys
  5. import os
  6. dir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'
  7. sys.path.append(dir_common)  # 将根目录添加到系统目录,才能正常引用common文件夹
  8. import argparse  #
  9. import logging
  10. import time,datetime
  11. from common.py_log import init_logger,init_console_logger
  12. from common.config import *
  13. from common.py_hbase import PyHbase
  14. import time,json
  15. from common.py_rabbit import Rabbit_Consumer
  16. import paho.mqtt.client as mqtt
  17. import time
  18. HOST = "192.168.2.46"
  19. PORT = 1883
  20. def client_loop():
  21.   client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
  22.   client = mqtt.Client(client_id)  # ClientId不能重复,所以使用当前时间
  23.   client.username_pw_set("guest", "guest") # 必须设置,否则会返回「Connected with result code 4」
  24.   client.on_connect = on_connect
  25.   client.on_message = on_message
  26.   client.connect(HOST, PORT, 60)
  27.   client.loop_forever()
  28. def on_connect(client, userdata, flags, rc):
  29.   print("Connected with result code "+str(rc))
  30.   client.subscribe("test")
  31. def on_message(client, userdata, msg):
  32.   print(msg.topic+" "+msg.payload.decode("utf-8"))
  33. if __name__ == '__main__':
  34.   client_loop()
复制代码
吸取数据demo(生产者)
  1. import sys
  2. import os
  3. dir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'
  4. sys.path.append(dir_common)  # 将根目录添加到系统目录,才能正常引用common文件夹
  5. import paho.mqtt.client as mqtt
  6. import time
  7. HOST = "192.168.2.46"
  8. PORT = 1883
  9. def client_loop():
  10.   client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
  11.   client = mqtt.Client(client_id)  # ClientId不能重复,所以使用当前时间
  12.   client.username_pw_set("guest", "guest") # 必须设置,否则会返回「Connected with result code 4」
  13.   client.on_connect = on_connect
  14.   client.on_message = on_message
  15.   client.connect(HOST, PORT, 60)
  16.   client.loop_forever()
  17. def on_connect(client, userdata, flags, rc):
  18.   print("Connected with result code "+str(rc))
  19.   client.subscribe("test")
  20. def on_message(client, userdata, msg):
  21.   print(msg.topic+" "+msg.payload.decode("utf-8"))
  22. if __name__ == '__main__':
  23.   client_loop()
复制代码
生产者demo
  1. # import paho.mqtt.client as mqtt
  2. import paho.mqtt.publish as publish
  3. import time
  4. HOST = "192.168.2.46"
  5. PORT = 1883
  6. def on_connect(client, userdata, flags, rc):
  7.   print("Connected with result code "+str(rc))
  8.   client.subscribe("test")
  9. def on_message(client, userdata, msg):
  10.   print(msg.topic+" "+msg.payload.decode("utf-8"))
  11. if __name__ == '__main__':
  12.   client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
  13.   # client = mqtt.Client(client_id)  # ClientId不能重复,所以使用当前时间
  14.   # client.username_pw_set("guest", "guest") # 必须设置,否则会返回「Connected with result code 4」
  15.   # client.on_connect = on_connect
  16.   # client.on_message = on_message
  17.   # client.connect(HOST, PORT, 60)
  18.   # client.publish("test", "你好 MQTT", qos=0, retain=False) # 发布消息
  19.   publish.single("test", "你好 MQTT", qos = 1,hostname=HOST,port=PORT, client_id=client
复制代码
官方文档:
mqtt http://www.rabbitmq.com/mqtt.html
总结
以上就是这篇文章的全部内容了,希望本文的内容对各人的学习大概工作具有肯定的参考学习代价,谢谢各人对草根技能分享的支持。如果你想相识更多相关内容请查察下面相关链接

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作