使用Lua脚本可以实现更复杂的数据处理逻辑,go-mysql-transfer支持Lua5.1语法
# **示例**
t_user表,数据如下:
![](https://img.kancloud.cn/b7/ae/b7aea55df3a0d071d67a930b1f497314_589x141.png)
在RocketMQ中创建名称为transfer\_test\_topic的topic,注意topic名称一定要和rule规则中rocketmq\_topic配置项的值一致
## **示例一**
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("transfer_test_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("transfer_test_topic",val) -- 发送消息,第一个参数为topic(string类型),第二个参数为消息内容
end
```
引入Lua脚本:
```
rule:
-
schema: eseap #数据库名称
table: t_user #表名称
lua_file_path: lua/t_user_rocket.lua #lua脚本文件
```
insert事件,同步到RocketMQ的数据如下:
![](https://img.kancloud.cn/76/34/7634a63b84f7ed8a6acb4f33bdc23cf9_840x51.jpg)
update事件,同步到RocketMQ的数据如下:
![](https://img.kancloud.cn/86/62/86628e14adea9afeeeba6423a5b7f063_849x49.jpg)
delete事件,同步到RocketMQ的数据如下:
![](https://img.kancloud.cn/16/af/16af12a1090f9d84ec997c5270af3930_678x54.png)
## 示例二
Lua脚本:
```
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("transfer_test_topic",str) -- 发送消息,第一个参数为topic(string类型),第二个参数为消息内容
end
```
同步到RocketMQ的数据如下:
![](https://img.kancloud.cn/b5/6b/b56b796f2db8efed0984ca467bd7a298_679x46.png)
## mqOps模块
提供的方法如下:
1. SEND: 发送操作,如:ops.SEND(topic,result)。参数topic为字符串类型;参数result为要发送的消息
- 简介
- 部署运行
- 高可用集群
- 同步数据到Redis
- Redis配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到MongoDB
- MongoDB配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到RocketMQ
- RocketMQ配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到Kafka
- Kafka配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到RabbitMQ
- RabbitMQ配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到Elasticsearch
- Elasticsearch配置
- 基于规则同步
- 基于Lua脚本同步
- 全量数据导入
- Lua脚本
- 基础模块
- Json模块
- HttpClient模块
- DBClient模块
- 监控
- 性能测试
- 常见问题
- 更新记录开发计划