MQTT EMQX v5.0版本监听客户端上下线通知、认证、授权

本文介绍了EMQX 5.0相较于4.4版本的改进,如内置插件和Web管理界面的增强。详细步骤演示了如何配置MySQL认证和授权,包括创建数据库表和在dashboard中设置。同时,讲解了如何利用Webhook实现客户端上线、下线通知,包括创建数据桥接规则和设置请求体。注意请求体的正确配置以避免连接问题。文章还提供了后台服务端接收并处理上下线事件的示例代码。
摘要由CSDN通过智能技术生成

之前在自助洗车项目中使用emqx的是4.4版本,最新部署的时候采用了5.0。
旧版本认证、上下线通知等都需要开启插件,在配置文件修改,操作比较麻烦。
升级后增强了dashboard(web管理界面),好多插件都成为内置插件,无需开启,且很多操作无需进入配置文件,直接在web即可配置。

认证、授权(以mysql为例)

1.创建数据库、表

  1. 创建数据库(自定义数据库名)
  2. 创建认证表(mqtt_user)
CREATE TABLE `mqtt_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password_hash` varchar(100) DEFAULT NULL,
  `salt` varchar(35) DEFAULT NULL,
  `is_superuser` tinyint(1) DEFAULT 0,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
#@auth 157239486@qq.com
  1. 创建授权表(mqtt_acl)
CREATE TABLE `mqtt_acl` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `permission` varchar(5) NOT NULL,
  `action` varchar(9) NOT NULL,
  `topic` varchar(100) NOT NULL,
  INDEX username_idx(username),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2. 登录dashboard,访问控制-认证

在这里插入图片描述

3.选择mysql,下一步,设置自己的mysql连接信息

一定要注意选择符合自己的 密码加密方式、加盐方式,在mysql设置密码的时候需要对应,否则会连接不上。

在这里插入图片描述

4.授权跟认证类似,就不贴了

在这里插入图片描述

EMQX客户端上线、下线通知(webhook)

1.数据集成-数据桥接-新建

在这里插入图片描述

2. 设置webhook信息

其他默认即可,URL、请求体需要设置。EMQX如果和服务端在同一服务器上,可以写内网地址。

请求体一定要自己配置,按我这个格式就是发送客户端ID和event事件,后台服务端接收到根据客户端ID更新上下线状态

ps: 刚开始没有仔细看请求体,以为跟以前4.4版本一样,默认发送,无需设置,后来才发现需要自己按格式输入,导致在这浪费了几个小时。。。 默认的是请求体是${payload},导致我在后台转换json的时候一直报错。

在这里插入图片描述

3.创建完成后会提示创建规则,或自行点击【数据集成-规则】

在这里插入图片描述

4.选择【动作】-【添加动作】

动作就是检测到事件后要执行什么行为,比如上线后通知给web服务端,或者转发给其他主题
在这里插入图片描述
在这里插入图片描述

客户端上线完整数据(需要的时候${属性名} 提取)

{"username":"username11","timestamp":1671771784831,"sockname":"172.17.0.2:1883","receive_maximum":32,"proto_ver":4,"proto_name":"MQTT","peername":"127.0.0.1:62742","node":"emqx@172.17.0.2","mountpoint":"undefined","metadata":{"rule_id":"rule_kmld"},"keepalive":30,"is_bridge":false,"expiry_interval":7200,"event":"client.connected","connected_at":1671771784831,"conn_props":{"User-Property":{}},"clientid":"clientid111","clean_start":false}

下线数据只是这里有变化,“event”:“client.disconnected”

后台判断上下线Demo

/**
 * 在线状态更新
 *
 * @author Lion 157239486@qq.com
 * @since 1.0.0 2022-12-17
 */
	public void updateStatus(Map<String, Object> params) {
        String event = (String) params.get("event");
        String clientId = (String) params.get("clientId");
        if (event.equals("client.connected")) {
            editOnline(true, clientId);
        }

        if (event.equals("client.disconnected")) {
            editOnline(false, clientId);
        }
    }

写文不易,能看到这里给个star吧~

### 回答1: MQTTNet是一个开发工具,提供了用于实现MQTT(Message Queuing Telemetry Transport)协议的功能。MQTT是一种轻量级的消息传递协议,广泛用于物联网中的设备间通信。 MQTTNet v5.0 是MQTTNet的一个版本,相较于之前的版本,它具有以下几个特点和改进: 1. 协议支持:MQTTNet v5.0支持MQTT协议的版本5.0,这意味着它可以兼容最新版本MQTT协议,并支持协议中引入的新特性和功能。 2. 性能优化:MQTTNet v5.0在性能方面进行了优化,提高了消息的传输速度和响应速度。它采用了异步的方式进行消息传输,提高了系统的吞吐量和响应能力。 3. 扩展性增强:MQTTNet v5.0提供了更多的扩展接口和功能,使得开发者可以更灵活地定制和扩展MQTTNet的功能。开发者可以根据需求添加自定义的插件和功能。 4. 支持安全性:MQTTNet v5.0增强了对安全性的支持,引入了TLS/SSL等加密和认证机制,保证了通信的安全性和可靠性。 5. 支持多种平台:MQTTNet v5.0可以在多种平台上运行,包括Windows、Linux和嵌入式设备等。这使得它可以适用于不同的应用场景和设备,具有更广泛的应用范围。 总之,MQTTNet v5.0是一个功能强大且易于使用的MQTT协议开发工具,它提供了高性能、可扩展性和安全性的消息传递功能,适用于物联网中的设备间通信。 ### 回答2: MQTT是一种轻量级的通信协议,其目的是为物联网设备提供简单、高效的通信方式。MQTTv5.0版本MQTT协议的最新版本,相对于之前的版本有一些更新和改进。 首先,MQTT v5.0引入了一些新的特性,以提升通信的可靠性和灵活性。例如,v5.0允许客户端向服务端发送属性信息,这样可以更好地描述客户端的属性和能力。另外,v5.0还提供了会话/连接级别的属性,使得客户端和服务端可以共享更多的信息。 此外,MQTT v5.0还改进了消息发布和订阅的机制。v5.0允许客户端在发布消息时指定发行策略,例如以有序或无序的方式进行发布。同时,v5.0引入了共享订阅的概念,允许多个订阅者共同订阅一个主题,从而实现更高效的消息传递。 另一个重要的改进是消息属性的引入。v5.0允许消息携带一些额外的属性,例如消息的优先级、过期时间等。这些属性可以帮助客户端和服务端更好地处理消息,并根据需要进行相应的操作。 总的来说,MQTT v5.0作为MQTT协议的最新版本,引入了一些新的特性和改进,以提升通信的可靠性、灵活性和效率。它为物联网设备的通信提供了更好的解决方案,使得设备间的通信更加简单、高效。 ### 回答3: MQTTNet v5.0是一种基于MQTT(Message Queuing Telemetry Transport)协议的开源库,用于在物联网(IoT)应用中建立连接和进行消息传递。 MQTT是一种轻量级的发布/订阅消息传输协议,广泛应用于物联网设备和应用程序之间的通信。MQTTNet v5.0是对MQTT协议的实现,通过提供一些必要的功能和易于使用的API,简化了在.NET平台上使用MQTT的开发过程。 MQTTNet v5.0的主要特点包括: 1. 支持MQTT v5.0协议:MQTTNet v5.0支持最新的MQTT版本,其中包含了一些新的特性,如自定义属性、请求与响应语义等。这使得开发者能够充分利用协议的各种功能,提高应用程序的灵活性和效率。 2. 强大的消息处理能力:MQTTNet v5.0提供了灵活而强大的消息处理机制,支持异步消息传递和消息过滤。开发者可以根据自己的需求定义和处理不同类型的消息,实现灵活的消息交互。 3. 容易集成和使用:MQTTNet v5.0具有简单易用的API,提供了丰富的配置选项和事件回调,使得开发者能够轻松地集成和使用该库。无论是在服务器端还是客户端应用中,都可以快速搭建MQTT连接和消息传递。 4. 高性能和可扩展性:MQTTNet v5.0是基于异步编程模型构建的,具有较高的运行效率和可扩展性。它可以处理大量的并发请求,支持多个连接和订阅,适用于高负载和大规模的物联网应用。 总之,MQTTNet v5.0是一个强大而灵活的开源库,为开发者提供了在.NET平台上使用MQTT协议进行物联网通信的方便和便利。无论是简单的传感器数据传输还是复杂的设备管理,该库都能提供稳定、高效和可靠的消息传递解决方案。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值