1
0
mirror of synced 2026-02-11 15:37:56 +08:00
Files
2023-06-20 20:54:57 +08:00

101 lines
3.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"C"
"fmt"
"time"
"github.com/yitter/idgenerator-go/regworkerid"
)
func main() {
//address := "192.168.1.207:6379"
address := "127.0.0.1:6379"
password := ""
masterName := ""
addrChar := C.CString(address)
passChar := C.CString(password)
masterNameChar := C.CString(masterName)
workerIdList := RegisterMany(addrChar, passChar, 4, masterNameChar, 31, 60, 20, 15)
for _, value := range workerIdList {
fmt.Println("注册的WorkerId:", value)
}
id := RegisterOne(addrChar, passChar, 4, masterNameChar, 31, 60, 15)
fmt.Println("注册的WorkerId:", id)
fmt.Println("end")
time.Sleep(time.Duration(300) * time.Second)
}
// RegisterOne 注册一个 WorkerId会先注销所有本机已注册的记录
// address: Redis连接地址单机模式示例127.0.0.1:6379哨兵/集群模式示例127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382
// password: Redis连接密码
// db: Redis指定存储库示例1
// sentinelMasterName: Redis 哨兵模式下的服务名称示例mymaster非哨兵模式传入空字符串即可
// minWorkerId: WorkerId 最小值示例30
// maxWorkerId: WorkerId 最大值示例63
// lifeTimeSeconds: WorkerId缓存时长3的倍数
//export RegisterOne
func RegisterOne(address *C.char, password *C.char, db int, sentinelMasterName *C.char, minWorkerId int32, maxWorkerId int32, lifeTimeSeconds int32) int32 {
return regworkerid.RegisterOne(regworkerid.RegisterConf{
Address: C.GoString(address),
Password: C.GoString(password),
DB: db,
MasterName: C.GoString(sentinelMasterName),
MinWorkerId: minWorkerId,
MaxWorkerId: maxWorkerId,
LifeTimeSeconds: lifeTimeSeconds,
})
}
// RegisterMany 注册多个 WorkerId会先注销所有本机已注册的记录
// address: Redis连接地址单机模式示例127.0.0.1:6379哨兵/集群模式示例127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382
// password: Redis连接密码
// db: Redis指定存储库示例1
// sentinelMasterName: Redis 哨兵模式下的服务名称示例mymaster非哨兵模式传入空字符串即可
// maxWorkerId: WorkerId 最大值示例63
// minWorkerId: WorkerId 最小值示例30
// totalCount: 获取N个WorkerId示例5
// lifeTimeSeconds: WorkerId缓存时长3的倍数
//export RegisterMany
func RegisterMany(address *C.char, password *C.char, db int, sentinelMasterName *C.char, minWorkerId int32, maxWorkerId int32, totalCount int32, lifeTimeSeconds int32) []int32 {
return regworkerid.RegisterMany(regworkerid.RegisterConf{
Address: C.GoString(address),
Password: C.GoString(password),
DB: db,
MasterName: C.GoString(sentinelMasterName),
MinWorkerId: minWorkerId,
MaxWorkerId: maxWorkerId,
TotalCount: totalCount,
LifeTimeSeconds: lifeTimeSeconds,
})
}
// UnRegister 注销本机已注册的 WorkerId
//export UnRegister
func UnRegister() {
regworkerid.UnRegister()
}
// Validate 检查本地WorkerId是否有效0-有效,其它-无效)
//export Validate
func Validate(workerId int32) int32 {
return regworkerid.Validate(workerId)
}
// To Build a dll/so
// windows:
// go build -o ./target/workeridgo.dll -buildmode=c-shared main.go
// // go build -o ./target/workeridgo.dll -buildmode=c-shared main.go reg.go
// linux init: go install -buildmode=shared -linkshared std
// go build -o ./target/workeridgo.so -buildmode=c-shared main.go
// go build -o ./target/workeridgo.so -buildmode=c-shared main.go reg.go
// https://books.studygolang.com/advanced-go-programming-book/ch2-cgo/ch2-09-static-shared-lib.html