前言:
软件介绍
kuiper:负责收消息、处理并显示或者保存
mosquitto:服务器,
mosquitto client:代理,负责发消息
本文背景:
本文是为了实现kuiper安装和测试,实现mosquitto发送消息,kuiper收到处理消息,类似于教程:https://blog.youkuaiyun.com/emqx_broker/article/details/103181634。但是本文包括了更多基本软件的安装教程,更加基础,但有的地方还是没有教程详细,所以还是可以参看教程。
背景介绍:
看上面的教程
1、Ubuntu 18.04安装MQTT Mosquitto
教程:https://blog.youkuaiyun.com/jsjwr/article/details/78800202
在这之前建议把服务器改为阿里镜像,可以大大加快下载速度。
更改镜像:
- 打开桌面的“软件与更新”软件
- 下载自-其他站点-mirror.aliyun.com
- 点击关闭,确定
1. 安装mosquitto:
1.引入mosquitto仓库并更新
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
2.执行以下命令安装mosquitto
sudo apt-get install mosquitto
3.查看mosquitto服务状态
sudo service mosquitto status
4.开启/停止mosquitto服务
sudo service mosquitto start
sudo service mosquitto stop
5.下载mosquitto client
sudo apt install mosquitto-clients
2. 测试
打开一个终端,接收
mosquitto_sub -h localhost -t "mqtt" -v
打开另一个终端,发布主题
mosquitto_pub -h localhost -t "mqtt" -m "Hello2 MQTT"
测试成功!
2、kuiper安装
安装:
官网下载,解压。https://github.com/emqx/kuiper/releases
开始实验
代码解释请看教程
详细的kuiper参数意义教程:https://blog.youkuaiyun.com/emqx_broker/article/details/103181634
启动kuiper
新建终端输入
# 启动
bin/server
# 创建流,订阅的主题为 `devices/+/messages`,`+`是通配符,所有相当于一次订阅了多个主题。
bin/cli create stream demo '(temperature float, humidity bigint) WITH (FORMAT="JSON", DATASOURCE="devices/+/messages")'
调试流
新建终端,输入
# 调试
bin/cli query
接着输入
SELECT avg(temperature) AS t_av, max(temperature) AS t_max, min(temperature) AS t_min, COUNT(*) As t_count, split_value(mqtt(topic), "/", 1) AS device_id FROM demo GROUP BY device_id, TUMBLINGWINDOW(ss, 10)
其中:
mqtt
:消息中取出 MQTT 协议的信息,mqtt(topic) 就是取得当前取得消息的主题名称
split_value
:该函数将第一个参数使用第二个参数进行分割,然后第三个参数指定下标,取得分割后的值。所以函数 split_value("devices/001/messages", "/", 1)
调用就返回001
GROUP BY
跟的是分组的字段,分别为计算字段 device_id
;时间窗口 TUMBLINGWINDOW(ss, 10)
,该时间窗口的含义为每10秒钟生成一批统计数据。
发送测试数据
新建终端,输入如:
mosquitto_pub -h localhost -t "devices/1/messages" -m "{\"temperature\":30,\"humidity\" :70}"
# 或者
mosquitto_pub -h 127.0.0.1 -p 1883 -t "devices/2/messages" -m ‘{"temperature":20,"humidity" :50}’
在kuiper终端就会每10秒刷新一次数据。统计过去10s内收到的消息数,最大最小温度
注意事项
- 数据源所对应的 MQTT 服务器地址在配置文件
etc/mqtt_source.yaml
中 bin/cli
连接本地服务器,cli 命令也可以连接到别的 Kuiper 服务器,用户可以在etc/client.yaml
配置文件中修改连接的 Kuiper 服务器。- 发送测试数据时,用反斜杠转义双引号。
参考链接
kuiper快速开始教程:https://github.com/emqx/kuiper/blob/master/docs/zh_CN/getting_started.md
EMQ X Kuiper 与 Azure IoT Hub 集成方案:https://www.jianshu.com/p/49b06751355f
emqx官网:https://docs.emqx.io/docs/broker/v3/cn/
几个问题:
- mosquitto发给的的是端口1883,kuiper接收的好像是20498,为什么端口不同也可以收到消息呢?