windows上搭建MQTT-broker服务器与使用python简单测试发布订阅消息使用

**

简介

**
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽、不可靠的网络的进行远程传感器和控制设备通讯等,正在日益成为物联网通信协议的重要组成部分。MQTT现在主要用于即时通讯,物联网M2M,物联网采集等。本文就社区上常见的开源MQTT服务器在常见操作系统上的搭建做详细介绍。目前一些开源MQTT服务中间件有:

  • 1)EMQX:github 6.3k stars(免安装版下载链接:https://www.emqx.io/downloads/broker/v4.1.0/)
  • 2)Mosquitto:github 3.9k stars
  • 3)Apollo:ActiveMQ的升级版,github 138 stars,但是该项目已经有3~4年没有更新。而其号称的老版本ActiveMQ反而更新更加频繁。

EMQ服务器在Windows搭建

EMQ (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。Erlang/OTP 是出色的软实时(Soft-Realtime)、低延时(Low-Latency)、分布式(Distributed) 的语言平台。一般来说,生产环境的MQTT服务建议搭建在Linux操作系统上,但是作为在给你验证和使用阶段,可以在常见的Windows平台上搭建、运行和测试。
**

安装步骤

**

  • 1)点击这里,下载EMQ windows版
  • 2)解压emqttd-windows7-v2.3.9.zip(这里是解压到D盘)
  • 3)打开 Windows 命令行窗口,进入emqx\bin解压目录
  • 4)在Windows命令行中启动EMQ,执行下列命令emqx.cmd start
    在这里插入图片描述
  • 5)EMQ提供了一个后端Web控制台,用户可通过 Web
    控制台,查看服务器运行状态、统计数据、客户端(Client)、会话(Session)、主题(Topic)、订阅(Subscription)、插件(Plugin)。如果EMQ安装在本机,则在浏览器打开http://127.0.0.1:18083***,输入默认用户名“admin”和默认密码“public”*,进入EMQ管理控制台。如下图所示,“Stats(1)”表格中,显示的是客户端和Topic的一些基本信息,比如“Clients/Count”的数目为0,表示目前连接的客户端数目为0;“Client/Max”表示的是连接曾经达到的最大值等。这里不对每项做一一介绍,读者对MQTT协议比较熟悉之后,就能理解监控仪表盘上的内容。
    (web浏览器可以访问如下界面说明安装成功)
    windows上搭建MQTT-broker服务器与使用python简单测试发布订阅消息使用_第1张图片

下面使用python测试发布及订阅消息:

首先需要安装mqtt模块:pip install paho-mqtt

发布客户端代码pub.py

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code: " + str(rc))

def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('127.0.0.1', 1883, 600) # 600为keepalive的时间间隔
client.publish('fifa', payload='amazing', qos=0)

订阅客户端代码sub.py

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code: " + str(rc))

def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
# client.on_disconnect = on_disconnect
client.connect('127.0.0.1', 1883, 600) # 600为keepalive的时间间隔
client.subscribe('fifa', qos=0)
client.loop_forever() # 保持连接

===========================================================================

另外一种测试方式,使用发布之后,订阅端保持长连接监听发布端消息,和上面其实是一样的。

# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
import json
import time

HOST = "127.0.0.1"
PORT = 1883
# client_id = ""                       # 没有就不写,此处部分内容用xxx代替原内容,下同

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("data/receive")         # 订阅消息


def on_message(client, userdata, msg):
    print("主题:"+msg.topic+" 消息:"+str(msg.payload.decode('utf-8')))


def on_subscribe(client, userdata, mid, granted_qos):
    print("On Subscribed: qos = %d" % granted_qos)


def on_disconnect(client, userdata, rc):
    if rc != 0:
        print("Unexpected disconnection %s" % rc)

data = {
    "type":2,
    "timestamp": time.time(),
    "messageId":"9fcda359-89f5-4933-xxxx",
    "command":"xx/recommend",
    "data":{
        "openId":"xxxx",
        "appId":'xxxx',
        "recommendType":"temRecommend"
    }
}
param = json.dumps(data)
client = mqtt.Client()
client.username_pw_set("user")
client.on_connect = on_connect
client.on_message = on_message
client.on_subscribe = on_subscribe
client.on_disconnect = on_disconnect
client.connect(HOST, PORT, 60)
client.publish("data/send", payload=param, qos=0)     # 发送消息
client.loop_forever()

连接成功以后的topic信息
windows上搭建MQTT-broker服务器与使用python简单测试发布订阅消息使用_第2张图片
done, thanks!

你可能感兴趣的:(mqtt,python)