消息通讯-MQTT WebHook&SpringBoot案例

0基础小白简单入门使用emqx的webhook+规则实现Mysql数据持久化 适合小白看,高手略过 阅读详情
AI摘要

文章介绍了EMQXWebHook的功能,包括其工作原理、配置项、如何在SpringBoot中集成以实现客户端连接状态监控。WebHook用于将EMQX事件推送到Web服务,支持设备在线/离线、消息处理等功能。

一、EMQX WebHook介绍

1、EMQX WebHook 是由 emqx_web_hook (opens new window)插件提供的将EMQX中的钩子事件通知到某个Web服务的功能。
2、WebHook 的内部实现是基于钩子,借助 Webhook 可以完成设备在线、上下线记录,订阅与消息存储、消息送达确认等诸多业务。

3、它通过在钩子上的挂载回调函数,获取到 EMQX 中的各种事件,并转发至 emqx_web_hook 中配置的 Web 服务器。

以 客户端成功接入(client.connected) 事件为例,其事件的传递流程如下:

    Client      |    EMQX     |  emqx_web_hook |   HTTP       +------------+
  =============>| - - - - - - -> - - - - - - - ->===========>  | Web Server |
                |    Broker    |                |  Request     +------------+

注意:WebHook 对于事件的处理是单向的,它仅支持将 EMQX 中的事件推送给 Web 服务,并不关心 Web 服务的返回。

二、EMQX WebHook配置项

Webhook 的配置文件位于 etc/plugins/emqx_web_hook.conf,配置项的详细说明可以查看官方文档配置

在默认etc/plugins/emqx_web_hook.conf中,官方为我们提供了如下的配置触发规则:

##====================================================================
## WebHook
##====================================================================

web.hook.api.url = http://127.0.0.1:80

## Format:
##   web.hook.rule.<HookName>.<No> = <Spec>
#web.hook.rule.client.connect.1       = {"action": "on_client_connect"}
#web.hook.rule.client.connack.1       = {"action": "on_client_connack"}
#web.hook.rule.client.connected.1     = {"action": "on_client_connected"}
#web.hook.rule.client.disconnected.1  = {"action": "on_client_disconnected"}
#web.hook.rule.client.subscribe.1     = {"action": "on_client_subscribe"}
#web.hook.rule.client.unsubscribe.1   = {"action": "on_client_unsubscribe"}
#web.hook.rule.session.subscribed.1   = {"action": "on_session_subscribed"}
#web.hook.rule.session.unsubscribed.1 = {"action": "on_session_unsubscribed"}
#web.hook.rule.session.terminated.1   = {"action": "on_session_terminated"}
#web.hook.rule.message.publish.1      = {"action": "on_message_publish"}
#web.hook.rule.message.delivered.1    = {"action": "on_message_delivered"}
#web.hook.rule.message.acked.1        = {"action": "on_message_acked"}

其中webhook支持的事件如下:

三、如何使用EMQX WebHook配置

手动修改Webhook的配置文件位于:etc/plugins/emqx_web_hook.conf.
修改配置非常简单,打开指定文件后,官方已经写好这些了,如上面所示,
只需要修改web.hook.url,和在你需要的钩子事件前的#号去掉即可。

emqx 启用插件 webhook插件(emqx有web控制台,在插件里启用就可以)

刷新后emqx_web_hook插件运行中即启动成功

然后就是自行搭建一个web接口服务,当客户端有指定事件后会主动推送,
接口地址即为Webhook的配置文件中配置的web.hook.api.url

WebHook配置事件推送参数详解

1、client.connect(处理连接报文)

 

2、client.connack(下发连接应答)

3、client.connected(成功接入)

4、client.disconnected(连接断开)

5、client.subscribe(订阅主题)

6、client.unsubscribe(取消订阅)

session.subscribed(会话订阅主题)
同 client.subscribe,action 为 session_subscribed

session.unsubscribed(会话取消订阅)
同 client.unsubscribe,action 为 session_unsubscribe

1、message.publish(消息发布)
2、message.delivered(消息投递)

3、message.acked(消息回执)

四、SpringBoot集成Webhook实现客户端断连监控

通过使用Emqx的Webhook插件实现监控所有客户端的连接状态,并做出客户端上线和下线后的逻辑处理

1. 实现前提

修改 etc/plugins/emqx_web_hook.conf 文件,设置事件转发的url和地址和触发规则
 

# 事件需要转发的目的服务器地址
web.hook.api.url = http://127.0.0.1:8000/api/mqtt/webhook

# 打开下面两个触发规则
web.hook.rule.client.connected.1     = {"action": "on_client_connected"}
web.hook.rule.client.disconnected.1  = {"action": "on_client_disconnected"}
2. 代码实现接口

通过EMQX 的webhook将客户端的连接断开等事件通知到我们自建的服务上,通过事件类型获取客户端的连接状态,然后将客户端的连接状态进行存储,并且提供HTTP API供后台系统查询所有客户端的状态。

package com.team.modules.mqtt.controller;

import com.google.gson.Gson;
import com.team.modules.mqtt.client.MyMQTTClient;
import com.team.modules.mqtt.service.SenderService;
import com.team.modules.system.domain.vo.ResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@Slf4j
@RequestMapping("/api/mqtt")
public class SenderController {

    @Autowired
    private MyMQTTClient myMQTTClient;

    @PostMapping("/webhook")
    public void webhook(@RequestBody() Map<String, Object> message) {
        // 监听连接的上线和下线
        System.out.println("收到的消息:" + message);

        String action = (String) message.get("action");
        String clientid = (String) message.get("clientid");
        if (action.equals("client_connected")) {
            log.info("client:{} 上线", clientid);
        }
        if (action.equals("client_disconnected")) {
            log.info("client:{} 下线", clientid);
        }
    }
}
3. 监听结果

启动服务后,模拟客户端连接emqx,查看服务记录的日志:

五、总结

由此看出客户端建立连接和断开连接后,Emqx服务都会给配置的接口web.hook.api.url = http://127.0.0.1:8000/api/mqtt/webhook发送一条数据,该数据字段可以参考上述的:WebHook配置事件推送参数详解。使用此方法可以将mqtt应用的更加灵活。其他的监听事件配置也类似,遇到合适场景可以自行发挥。
 

springboot对接minio的webhook全过程 近日需要将minio的apache2.0版本给用起来,顺便要完善一下原有的文件上传管理系统,其中很重要的一点是,在原有客户端直传的基础上,再添加 minio 的上传回调给服务端做后续处理。本文重点在于,介绍整个minio与springboot对接webhook过程。ps:minio-2021-04-22,mc-2021-04-22 是我从源代码编译出来的最后一个apache2.0版本,无视即可,可以直接从官网下载再新版—除非你也想折腾。 阅读详情

相关推荐

SpringBoot + Webhook 实战指南:彻底告别低效轮询模式

特性轮询 (Polling)Webhook实时性低高效率低(无效请求多)高(事件驱动)服务端压力高低实现复杂度简单中等适用场景实时性不高事件驱动、系统集成结论在现代分布式系统和微服务架构中,是构建实时响应系统的首选方案。它不仅减少资源消耗,还能极大提升系统的实时性与用户体验。

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 620

消息通讯——MQTT WebHook&SpringBoot案例

EMQX WebHook 是由 emqx_web_hook (opens new window)插件提供的将EMQX中的钩子事件通知到某个Web服务的功能。WebHook 的内部实现是基于钩子,借助 Webhook 可以完成设备在线、上下线记录,订阅与消息存储、消息送达确认等诸多业务。它通过在钩子上的挂载回调函数,获取到 EMQX 中的各种事件,并转发至 emqx_web_hook 中配置的 Web 服务器。

不愿意做鱼的小鲸鱼の博客 1737

物联网设备数据流转之实时数据从哪里来、如何转发:Node.js, MQTT, EMQX的WebHook

背景 前面两篇是搭建环境,从这一篇起就要真正开始我们的项目实现了,来,再一起喊下我们的口号: 人至践则无敌。 本篇文章来重点体验下 EMQX 为我们提供的 WebHook 功能。我们用到了以下技术点: EMQX 的 WebHook 消息监听与转发功能; 使用 Node.js 模拟了一个 MQTT 客户端; 使用 SpringBoot 搭建后端服务回调接口; 让我们看看设备消息现在到哪里了(红色背景部分)。 配置WebHook # 养成好习惯,修改配置文件前先备份 [root@iot1 emqx]#

Heartsuit的博客 2184

使用 EMQX 开源版的 Webhook 机制处理消息并存储数据

使用 EMQX 开源版的 Webhook 机制,处理收到的 Webhook 请求,将其中的数据存储到数据库中

大唐锦绣的博客 5192

使用 git一个仓库管理多个项目

我们需要在 git 里面创建一个空分支,该分支不继承任何提交,没有父节点,完全是一个干净的分支,这时候就需要使用 orphan。该命令会创建一个新的分支,并且该分支有前一个分支下的所有文件,我们不想提交任何内容,所以我们需要把当前内容全部删除。此时 master 分支已经有一个项目了,下面我们创建新的分支管理另一个项目。此时可以在该分支目录上初始化你的项目,在执行 git 命令提交代码。此时我们就完成了在同一个仓库管理不同项目的需求了。下载仓库到本地之后,进入项目目录,查看分支信息。

xrs151的博客 2025

VPI与Matlab协同仿真:相干光通信接收端DSP算法全解析

本文详细解析了如何利用VPI与Matlab协同仿真,构建完整的相干光通信接收端DSP算法处理闭环。重点介绍了从VPI导出数据后,在Matlab中实现时钟恢复、偏振解复用和载波相位估计等核心算法的步骤与原理,并阐述了如何通过误码率计算完成仿真验证,为相干光通信系统算法研究与验证提供了高效实用的方法。

ll5678的博客 608

[简单便捷]springboot整合企业微信webhook快速发送消息提醒

企业微信webhook发送工具包(wework webhook robot) a java SDK for wework webhook robot github项目地址 介绍(introduction) 本人前端时间做后台提醒功能,需要用到企业微信webhook机器人发送各种消息。很多参数拼接搞得焦头烂额。干脆写了一个工具包。有需要就可以和spring快速集成。配置好webhook地址之后就可以快速方便发送消息,摒弃了各种参数的拼接。 现在已经支持: 文本消息 图片消息 文本卡片消息 图文消息(批量)

swalikh的博客 6307

Light Tools 8.4 在 win10系统上的安装方法(64位)

** 总的来说安装LT需要以下步骤(折腾了三天终于装好): 安装LT软件–禁用签名–加载含数字签名的第三方inf–添加注册表/安装驱动/添加密钥–成功破解 一、下载对应的LightTools 8.4版本软件,如下图为解压后的文件: 并选择 进行默认安装。 二、禁用数字签名。这里我用了两种方法,一种不行就换另一种,最终成功禁用。 方法1: 1、输入“cmd”并以管理员身份运行; 2、输入或复制 bcdedit.exe /set nointegritychecks on (此命令若没成功,再试bcded

weixin_45560953的博客 1万+

EMQX WebHook及案例

1 WebHook WebHook 是由 emqx_web_hook (opens new window)插件提供的 将 EMQX 中的钩子事件通知到某个 Web 服务 的功能。 WebHook 的内部实现是基于 钩子,但它更靠近顶层一些。 它通过在钩子上的挂载回调函数,获取到 EMQX 中的各种事件,并转发至 emqx_web_hook 中配置的 Web 服务器。 以 客户端成功接入(client.connected) 事件为例,其事件的传递流程如下: Client | EMQX

爱是与世界平行 4356

PaddleOCR转ONNX模型实战:5分钟搞定中文OCR推理部署(附完整代码)

本文详细介绍了将PaddleOCR模型转换为ONNX格式并进行高效推理部署的完整实战方案。通过Paddle2ONNX工具实现模型转换,利用ONNX Runtime构建跨平台推理引擎,涵盖环境配置、模型优化、批量处理及多平台部署等关键步骤,显著提升中文OCR在边缘设备上的推理性能。

weixin_29051811的博客 616

Nacos 2.3.2与PostgreSQL的Docker化部署实战

本文详细介绍了Nacos 2.3.2与PostgreSQL的Docker化部署实战,包括环境准备、数据库配置、镜像获取与导入、容器部署及常见问题排查。通过Docker容器化技术,结合PostgreSQL的稳定性和扩展性,为微服务架构提供高效的服务发现和配置管理解决方案。

k5l6m的博客 281

SpringBoot -- 配置中心服务/webhook

配置中心服务器 配置中心服务器,以版本的管理方式对分布式系统提供外部配置支持; SpringCloud中采用Spring Cloud Config 进行集成,而想要进行实施更新则需要采用spring cloud bus的方式, 如 Rabbit、Kafka 等。 版本管理采用 Git 这里采用Kafka,因为本地有开发测试环境 服务注册与发现参考 /bus/refr

代码行间的无聊生活的博客 8066

从点云到舱口尺寸:船甲板舱口检测的算法实现

本文提出了一种从船甲板激光扫描点云中自动检测舱口尺寸的算法。通过数据预处理(降采样、去噪、平面分割)后,采用甲板投影轮廓法将3D点云转换为2D图像,利用双次闭运算解决扫描碎片化问题,通过轮廓树检测内轮廓识别舱口。算法最终能稳定检测出三个主要舱口的长宽尺寸、面积和位置信息,矩形度超过0.89。该方法克服了扫描稀疏和围壁结构复杂的问题,参数可调性强,适用于工程实践。关键创新点在于将舱口识别转化为图像中的"洞"检测,而非直接处理3D几何特征。

点云兔子的博客 146

MQTT——EMQX学习笔记06——WebHook

目录标题一、开启WebHook插件二、绑定web服务器三、配置事件规则四、创建web服务器(一)导入pom依赖(二)改yml(三)代码(四)测试 一、开启WebHook插件 这个功能是由emqx_web_hook插件提供支持的。WebHook有什么用,它用于监控一些规则,比如发布、订阅消息。当监控到这些规则触发时,会向web服务器(spring boot项目)发送一些数据(消息)。 这个功能是默认关闭的,我们先去开启这个功能。 二、绑定web服务器 [root@iz2zedg4ylq9iqtwm11wec

a123123sdf的博客 8508

lammps模拟石墨烯吸附水分子(gcmc)

本文分享lammps gcmc吸附的一个案例代码,上下壁面的通道材料为石墨烯,吸附的分子为tip4p水分子。大家好,我是小马老师。

lammps_jiayou的博客 2590

Intellij IDEA 使用教程(一)Jdk安装和配置

一.JDK下载 这里下载的是Java SE 8u181 64位版本。可以根据自己电脑配置来选择不同版本。 官网下载JDK 二.安装JDK 双击运行jdk-8u181-windows-x64.exe安装程序 选择安装目录,然后点击下一步 等待安装 安装JRE,就是java的运行环境,可以安装在java目录下 等待安装 安装完成。点击关闭。 三.java环境变量配置 关于环境变量的配置,...

岁月不饶人,我亦未曾饶过岁月 4052

【fly-iot飞凡物联】(18):配置Emqx的webhook,编写http接口,完成设备状态的更新。显示在线/离线状态,异步插入数据库,使用supervisor启动

使用webhook还是非常方便的。可以快速的实现设备状态的更新。同时接搜到设备的在线消息。

freewebsys的专栏 2168

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

EMQX webhook实现转发消息到java web服务器并保存到MySQL数据库

EMQX webhook 实现转发mqtt消息数据到web服务器,服务器保存数据到mysql数据库 之前写过一篇关于EMQX数据持久化到MySQL数据库,但由于这个功能需要EMQX 企业版才能实现,而企业版的费用对于我这种学生党而言实在难以负担。于是,我在EMQX官方发现另一种方法也可以实现保存数据。官网对于webhook的示例 从示例中可知,我需要一个web服务器来接收EMQX服务器post过来...

杀手的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【EMQX】通过EMQX webhook实现转发消息到Python web服务器

通过EMQX webhook实现转发消息到Python web服务器

Qiu的博客 2962

EMQX 的webHook使用

1、EMQX相关命令 4.0.5之后版本启动需要进入安装路径下/etc/emqx emqx stop 停止命令 emqx start 启动命令 2、webhook处理设备离线 找到安装路径中的plugins。我的路径是/etc/emqx/plugins。最下面有emqx_web_hook.conf,使用vim编辑。 文字为 web.hook.api.url = ip:端口/webHook/onJkWebHook ...

qq_35909525的博客 4329

EMQx 通过Webhook 实现数据的数据存储

概述: EMQx 开发源版本,是不能直接通过插件或者其他方式对消息进行存储,虽然不能通过现成的插件存储消息,那么可能就需要我们做一些工作。 目前开源版的功能,可以通过如下三种方式实现: 规则引擎+Webhook 到 某个你的 WebServer 然后你自己存到 mysql 里面 用 ExHook 的方式,基于 gRPC 来捕捉 emqx 的消息事件,仍然需要自己手动存储 使用 MQTT 客户端共享订阅的方式 通过Webhook 方式实现消息的存储 创建资源 创建转发规则 这里消息只处理了

houxian1103的博客 2723

java web自动化部署工具_用 springboot 自己写的自动化部署小工具 : Webhooks

Webhooks刚学 springboot 的也可以参考该工程。哈哈。虽然没有一点卵用。java 执行预设命令,通过 http 调用,兼容 linux 和 windows。该小工具的问世,主要是有目的而来的。我通过该项目进行博客,和别人在我服务器上的另一个项目的部署更新,只需要提交到 git,自动触发 webhooks,来 post 访问我的 api,则网站自动更新,不失为一种高效的自动化部署方案...

weixin_39851918的博客 631

【EMQX】EMQX中webhook配置数据源 https以及http配置内容 规则引擎转发webhook

【EMQX】EMQX中webhook配置数据源 https以及http配置内容 规则引擎转发webhook

CTRA®王大大技术中心 1508

docker部署,mqtt使用wehook桥接数据到时序数据库

使用docker实现emqx桥接数据到taos数据库

数据小白的博客 694

EMQX的HTTP认证和webhook配置

后端运行在本地使用localhost或本机IP,端口默认8080,如果做了修改或者代理,需要对应修改。超级用户认证和ACL鉴权用不到,但是需要注释掉,不然会占用几秒的认证时间。,后端运行在本地使用localhost或本机IP,端口默认8080,如果做了修改或者代理,需要对应修改。系统使用EMQX的WebHook插件,实现设备上下线和IP定位功能。系统使用EMQX的HTTP认证插件,实现自定义认证逻辑。匿名认证不安全,同时会影响认证流程,需要关闭。,文件比较大,大概位于第447行。认证请求地址为后端接口。

weixin_57442997的博客 2015
上一篇: Excel【毫秒】/【秒】转换成【时分秒】/【分秒】
下一篇: Excel中部分sheet页隐藏并设置访问密码
Knight-Key
博客等级 码龄9年 2357粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight-Key

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值