Before EMQ X 4.1. We only provide multi-language support for Lua. Its architecture is different from the above mentioned, which will include the entire language runtime in the Erlang VM:
- Multiple language support appears as a plug-in. For different language environments, different language support plugins are required.
- This supported plugin embeds all the environments of the language runtime.
To maintain compatibility, the plug-in remains in the release version of EMQ X.
In the EMQ X Broker distribution, user-defined Lua script files should be placed in
Take the sending content of the control message as an example, and add the file
function on_message_publish(clientid, username, topic, payload, qos, retain) return topic, "hello", qos, retain end function register_hook() return "on_message_publish" end
The script shows:
- Implemented a callback function
on_message_publishand changed the
payloadfield of all published messages to
emqx_lua_hookthe name list of callback function that need to be registered.
It is worth noting that the names, parameters, data types, and number of these callback functions are fixed and must be consistent with the examples provided.
After the script is written, you need to manually load it into the
emqx_lua_hook plugin is enabled at first:
./bin/emqx_ctl plugins load emqx_lua_hook
./bin/emqx_ctl luahook load test.lua
When the execution succeeds, it means that the script has been successfully loaded. Otherwise, check whether the syntax of the source file is correct.
After completion, you can start two MQTT clients, one to subscribe to any topic, and the other to publish any message to the topic that you just subscribed to. It can be found that the message content received by the subscriber is
hello which proves that the
test.lua script has taken effect.
# Callback function
Supported callback functions and parameter type: emqx-lua-hook - README.md (opens new window)
Example: examples.lua (opens new window)
Load the specified Lua script:
## Script: Script file name luahook load <Script>
Unload the specified Lua script:
luahook unload <Script>
Reload the specified Lua script:
luahook reload <Script>
Load the specified Lua script and set it to start with
luahook enable <Script>
Unload the specified Lua script and cancel it to start with
luahook disable <Script>