ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
使用Lua脚本可以实现更复杂的数据处理逻辑,go-mysql-transfer支持Lua5.1语法 # **示例** t_user表,数据如下: ![](https://img.kancloud.cn/b7/ae/b7aea55df3a0d071d67a930b1f497314_589x141.png) ## **示例一** Lua脚本: ``` local json = require("json") -- 加载json模块 local ops = require("mqOps") --加载mq操作模块 local row = ops.rawRow() --当前数据库的一行数据,table类型,key为列名称 local action = ops.rawAction() --当前数据库事件,包括:insert、updare、delete local id = row["ID"] --获取ID列的值 local userName = row["USER_NAME"] --获取USER_NAME列的值 local password = row["PASSWORD"] --获取USER_NAME列的值 local createTime = row["CREATE_TIME"] --获取CREATE_TIME列的值 local result = {} -- 定义一个table,作为结果 result["id"] = id result["action"] = action if action == "delete" -- 删除事件 then local val = json.encode(result) -- 将result转为json ops.SEND("user_topic",val) -- 发送消息,第一个参数为topic(string类型),第二个参数为消息内容 else result["userName"] = userName result["password"] = password result["createTime"] = createTime result["source"] = "binlog" -- 数据来源 local val = json.encode(result) -- 将result转为json ops.SEND("user_topic",val) -- 发送消息,第一个参数为topic(string类型),第二个参数为消息内容 end ``` 引入Lua脚本: ``` rule: - schema: eseap #数据库名称 table: t_user #表名称 lua_file_path: lua/t_user_rabbit.lua #lua脚本文件 ``` insert事件,同步到RabbitMQ的数据如下: ![](https://img.kancloud.cn/54/90/5490a4dd72561657e4cf5895f5fd8fa5_367x266.jpg) update事件,同步到RabbitMQ的数据如下: ![](https://img.kancloud.cn/48/1f/481f5366ae4eea3d7ffa6cc95bf9eba8_356x263.jpg) delete事件,同步到RabbitMQ的数据如下: ![](https://img.kancloud.cn/2c/2b/2c2b1e9bd33c0d53b0f6901c2745ec54_339x156.jpg) ## **示例二** 使用如下脚本: ``` local ops = require("mqOps") --加载mq操作模块 local row = ops.rawRow() --当前数据库的一行数据,table类型,key为列名称 local action = ops.rawAction() --当前数据库事件,包括:insert、updare、delete local userName = row["USER_NAME"] --获取USER_NAME列的值 if action == "insert" then -- 只监听添加事件 local str = string.format("恭喜您:%s 注册成功",userName) ops.SEND("user_topic",str) -- 发送消息,第一个参数为topic(string类型),第二个参数为消息内容 end ``` 同步到RabbitMQ的数据如下: ![](https://img.kancloud.cn/2c/cb/2ccb2e607020bc0bb0385b5a9ee6f188_369x95.jpg) # **mqOps模块** 提供的方法如下: 1. SEND: 发送操作,如:ops.SEND(topic,result)。参数topic为字符串类型;参数result为要发送的消息