从 v4.1 版本开始,EMQ X 提供了专门的多语言支持插件 emqx_extension_hook (https://github.com/emqx/emqx-extension-hook) ,现已支持使用其他编程语言来处理 EMQ X 中的钩子事件,开发者可以使用 Python 或者 Java 快速开发自己的插件,在官方功能的基础上进行扩展,满足自己的业务场景。例如:
验证某客户端的登录权限:客户端连接时触发对应函数,通过参数获取客户端信息后通过读取数据库、比对等操作判定是否有登录权限
记录客户端在线状态与上下线历史:客户端状态变动时触发对应函数,通过参数获取客户端信息,改写数据库中客户端在线状态
校验某客户端的 PUB/SUB 的操作权限:发布/订阅时触发对应函数,通过参数获取客户端信息与当前主题,判定客户端是否有对应的操作权限
处理会话 (Sessions) 和 消息 (Message) 事件,实现订阅关系与消息处理/存储:消息发布、状态变动时触发对应函数,获取当前客户端信息、消息状态与消息内容,转发到 Kafka 或数据库进行存储。
注:消息(Message) 类钩子,仅在企业版中支持。
Python 和 Java 驱动基于 Erlang/OTP-Port (https://erlang.org/doc/tutorial/c_port.html) 进程间通信实现,本身具有非常高的吞吐性能,本文以 Java 拓展为例介绍 EMQ X 跨语言拓展使用方式。
要求
EMQ X 所在服务器需安装 JDK 1.8 以上版本
开始使用
创建 Java 项目
下载 io.emqx.extension.jar (https://github.com/emqx/emqx-extension-java-sdk/releases) 和 erlport.jar (https://github.com/emqx/emqx-extension-java-sdk/blob/master/deps/erlport-v1.1.1.jar) 文件
添加SDK
io.emqx.extension.jar
和erlport.jar
到项目依赖复制
examples/SampleHandler.java
到您的项目中根据 SDK
SampleHandler.java
中的示例编写业务代码,确保能够成功编译