可以在Lua脚本中发送http请求,支持POST、GET、PUT、DELETE方法
使用httpOps模块,你可以不使用Redis、MQ等接收端,直接将数据发送到应用接口
# **示例**
t_user表,数据如下:
![](https://img.kancloud.cn/b7/ae/b7aea55df3a0d071d67a930b1f497314_589x141.png)
Lua脚本:
```
-- t_user_httpclient.lua
local ops = require("scriptOps") --加载脚本操作模块
local json = require("json") -- 加载json模块
local httpclient = require("httpOps") --加载http操作模块
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列的值
if action == "insert" then -- 插入事件
-- http get请求,第一个参数为URL,类型为string;第二个参数为header参数,类型为table
--local url = string.format("http://localhost:8080/users/%s", _userName)
--local res = httpclient.get(url,{
-- Authorization="Basic OSdjJGRpbjpvcGVuIANlc2SdDE=="
--})
--if(res~=nil) then
-- http响应代码,如:200、401、403、500等
-- print(res.status_code)
-- http响应内容,string类型
-- print(res.body)
--else
-- print("request fail")
--end
--http post请求,第一个参数为URL,类型为string;第二个参数为header参数,类型为table;第三个参数为post内容,类型为table
local url = "http://localhost:8080/users"
local _data = json.encode(row) -- 将result转为json
local res = httpclient.post(url,{
Authorization="Basic OSdjJGRpbjpvcGVuIANlc2SdDE=="
},{
data=_data,
})
if(res~=nil) then
-- http响应代码,如:200、401、403、500等
print(res.status_code)
-- http响应内容,string类型
print(res.body)
else
print("post request fail")
end
end
if action == "update" then -- 更新事件
--http put请求,第一个参数为URL,类型为string;第二个参数为header参数,类型为table;第三个参数为put内容,类型为table
local url = "http://localhost:8080/users"
local _data = json.encode(row) -- 将result转为json
local res = httpclient.put(url,{
Authorization="Basic OSdjJGRpbjpvcGVuIANlc2SdDE=="
},{
data=_data,
})
if(res~=nil) then
-- http响应代码,如:200、401、403、500等
print(res.status_code)
-- http响应内容,string类型
print(res.body)
else
print("put request fail")
end
end
if action == "delete" then -- 删除事件
-- http delete请求,第一个参数为URL,类型为string;第二个参数为header参数,类型为table
local url = string.format("http://localhost:8080/users/%s", _id)
local res = httpclient.delete(url,{
Authorization="Basic OSdjJGRpbjpvcGVuIANlc2SdDE=="
})
if(res~=nil) then
-- http响应代码,如:200、401、403、500等
print(res.status_code)
-- http响应内容,string类型
print(res.body)
else
print("delete request fail")
end
end
```
引入脚本:
```
#目标类型
target: script # 支持redis、mongodb、elasticsearch、rocketmq、kafka、rabbitmq、script
#规则配置
rule:
-
schema: eseap #数据库名称
table: t_user #表名称
#order_by_column: id #排序字段,存量数据同步时不能为空
lua_file_path: lua/t_user_httpclient.lua #lua脚本文件
#lua_script: #lua 脚本
```
insert事件,发送到后台的数据如下:
![](https://img.kancloud.cn/48/5e/485e8ffe23c747848c7a57b3e7b1281d_1431x101.jpg)
update事件,发送到后台的数据如下:
![](https://img.kancloud.cn/87/8e/878e0ba9b28561c9ada2f78eabe49c27_1444x102.jpg)
delete事件,发送到后台的数据如下:
![](https://img.kancloud.cn/94/a9/94a9f8e2addb190751be676039ab5be6_1452x100.jpg)
# **httpOps模块**
提供的方法如下:
1、get(url,headers) 发送get请求;url为请求地址;headers为请求头参数,table类型
2、delete(url,headers) 发送delete请求;url为请求地址;headers为请求头参数,table类型
3、post(url,headers,formItems) 发送post请求;url为请求地址;headers为请求头参数,table类型;formItems为表单数据,table类型
4、put(url,headers,formItems) 发送put请求;url为请求地址;headers为请求头参数,table类型;formItems为表单数据,table类型
上面4个方法的返回值为一个table类型的结果,元素"status_code"为http响应状态,Number类型(如:200、401、403、500等);元素body为http响应内容,string类型
# **后台测试代码**
## **golang**
```
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/users/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "Get: %s", name)
})
r.POST("/users", func(c *gin.Context) {
authorization:=c.GetHeader("Authorization")
data := c.PostForm("data")
fmt.Printf("method: post \n")
fmt.Printf("authorization: %s \n", authorization)
fmt.Printf("data: %s \n",data)
c.String(http.StatusOK, "ok")
})
r.PUT("/users", func(c *gin.Context) {
authorization:=c.GetHeader("Authorization")
data := c.PostForm("data")
fmt.Printf("method: put \n")
fmt.Printf("authorization: %s \n", authorization)
fmt.Printf("data: %s \n",data)
c.String(http.StatusOK, "ok")
})
r.DELETE("/users/:id", func(c *gin.Context) {
id := c.Param("id")
authorization:=c.GetHeader("Authorization")
fmt.Printf("method: delete \n")
fmt.Printf("authorization: %s \n", authorization)
fmt.Printf("id: %s \n",id)
c.String(http.StatusOK, "ok")
})
r.Run() // listen and serve on 0.0.0.0:8080
}
```
## **java(spring mvc)**
```
@RestController
@RequestMapping("/users")
public class LuaHttpClientTest {
@PostMapping
public String insert(@RequestParam(name = "data") String data,
@RequestHeader(value="Authorization") String authorization) {
System.out.println("method: post");
System.out.println("authorization: "+authorization);
System.out.println("data: "+data);
return "ok";
}
@PutMapping
public String update(@RequestParam(name = "data") String data,
@RequestHeader(value="Authorization") String authorization) {
System.out.println("method: put");
System.out.println("authorization: "+authorization);
System.out.println("data: "+data);
return "ok";
}
@DeleteMapping("/{id}")
public String delete(@PathVariable(name = "id") String id,
@RequestHeader(value="Authorization") String authorization) {
System.out.println("method: delete");
System.out.println("authorization: "+authorization);
System.out.println("id: "+id);
return "ok";
}
}
```
- 简介
- 部署运行
- 高可用集群
- 同步数据到Redis
- Redis配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到MongoDB
- MongoDB配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到RocketMQ
- RocketMQ配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到Kafka
- Kafka配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到RabbitMQ
- RabbitMQ配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到Elasticsearch
- Elasticsearch配置
- 基于规则同步
- 基于Lua脚本同步
- 全量数据导入
- Lua脚本
- 基础模块
- Json模块
- HttpClient模块
- DBClient模块
- 监控
- 性能测试
- 常见问题
- 更新记录开发计划