可以在Lua腳本中發送http請求,支持POST、GET、PUT、DELETE方法
使用httpOps模塊,你可以不使用Redis、MQ等接收端,直接將數據發送到應用接口
# **示例**
t_user表,數據如下:

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事件,發送到后臺的數據如下:

update事件,發送到后臺的數據如下:

delete事件,發送到后臺的數據如下:

# **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模塊
- 監控
- 性能測試
- 常見問題
- 更新記錄開發計劃