怎么用Python开发EMQ X MQTT服务器插件

发布时间:2021-08-15 18:27:40 作者:chen
来源:亿速云 阅读:265

这篇文章主要讲解了“怎么用Python开发EMQ X MQTT服务器插件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python开发EMQ X MQTT服务器插件”吧!

从 v4.1 版本开始,EMQ X MQTT 服务器 提供了专门的多语言支持插件 emqx_extension_hook ,现已支持使用其他编程语言来处理 EMQ X 中的钩子事件,开发者可以使用 Python 或者 Java 快速开发自己的插件,在官方功能的基础上进行扩展,满足自己的业务场景。例如:

注:消息(Message) 类钩子,仅在企业版中支持。

Python 和 Java 驱动基于 Erlang/OTP-Port 进程间通信实现,本身具有非常高的吞吐性能,本文以 Python 拓展为例介绍 EMQ X 跨语言拓展使用方式。

怎么用Python开发EMQ X MQTT服务器插件

Python 拓展使用示例

要求

使用步骤

  1. 通过 pip 安装 Python SDK

  2. 调整 EMQ X 配置,确保相关配置项正确指向 Python 项目

  3. 引入 SDK 编写代码

Python 插件安装

通过 pip 命令在本地安装 SDK,确保使用 pip3 进行安装

pip3 install emqx-extension-sdk

修改配置

修改 emqx-extension-hook 插件配置,正确使用拓展:

## Setup the supported drivers
##
## Value: python2 | python3 | java
exhook.drivers = python3

## Search path for scripts/library
exhook.drivers.python3.path = data/extension/hooks.py

## Call timeout
##
## Value: Duration
##exhook.drivers.python3.call_timeout = 5s

## Initial module name
## Your filename or module name
exhook.drivers.python3.init_module = hooks

编写代码

emqx/data/extension 目录下新建 hooks.py 文件,引入 SDK 编写业务逻辑,示例程序如下:

## data/extension/hooks.py

from emqx_extension.hooks import EmqxHookSdk, hooks_handler
from emqx_extension.types import EMQX_CLIENTINFO_PARSE_T, EMQX_MESSAGE_PARSE_T


# 继承 SDK HookSdk 类
class CustomHook(EmqxHookSdk):

  	# 使用装饰器注册 hooks
    @hooks_handler()
    def on_client_connect(self,
                          conninfo: EMQX_CLIENTINFO_PARSE_T = None,
                          props: dict = None,
                          state: list = None):
        print(f'[Python SDK] [on_client_connect] {conninfo.clientid} connecte')

    @hooks_handler()
    def on_client_connected(self,
                            clientinfo: EMQX_CLIENTINFO_PARSE_T,
                            state: list = None):
        print(
            f'[Python SDK] [on_client_connected] {clientinfo.clientid} connected')

    @hooks_handler()
    def on_client_check_acl(self, clientinfo: EMQX_CLIENTINFO_PARSE_T,
                            pubsub: str,
                            topic: str,
                            result: bool,
                            state: tuple) -> bool:
        print(
            f'[Python SDK] [on_client_check_acl] {clientinfo.username} check ACL: {pubsub} {topic}')
        # 用户名为空时,ACL 验证不通过
        if clientinfo.username == '':
            return False
        return True

    @hooks_handler()
    def on_client_authenticate(self, clientinfo: EMQX_CLIENTINFO_PARSE_T, authresult,
                               state) -> bool:
        print(
            f'[Python SDK] [on_client_authenticate] {clientinfo.clientid} authenticate')
        # clientid 不为空时,验证通过
        if clientinfo.clientid != '':
            return True
        return False

    # on_message_* 仅支持企业版
    @hooks_handler()
    def on_message_publish(self, message: EMQX_MESSAGE_PARSE_T, state):
        print(
            f'[Python SDK] [on_message_publish] {message.topic} {message.payload}')


emqx_hook = CustomHook(hook_module=f'{__name__}.emqx_hook')


def init():
    return emqx_hook.start()


def deinit():
    return

启动

启动 emqx_extension_hook 插件,如果配置错误或代码编写错误将无法正常启动。启动后尝试建立 MQTT 连接并观察业务运行情况。

./bin/emqx_ctl plugins load emqx_extension_hook

感谢各位的阅读,以上就是“怎么用Python开发EMQ X MQTT服务器插件”的内容了,经过本文的学习后,相信大家对怎么用Python开发EMQ X MQTT服务器插件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. MQTT和CoAP在EMQ X里怎么实现连接
  2. 基于MySQL的EMQ X Auth & ACL怎么使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:怎么进入CentOS界面字符工作方式

下一篇:怎么在Linux系统下运行微信Web开发者工具

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》