Golang 项目中使用
在 Go 项目中使用 ZHub 客户端
安装依赖
go get github.com/your-org/zhub-client-go
说明
Go 客户端的实际包名请以官方发布为准,此处仅为示例
基础连接
package main
import (
"log"
"github.com/your-org/zhub-client-go"
)
func main() {
// 创建 ZHub 客户端
client := zhub.NewClient("127.0.0.1:1216", "go-group", "go-app-001", "token-12345")
// 连接服务
err := client.Connect()
if err != nil {
log.Fatal("连接失败:", err)
}
defer client.Close()
log.Println("ZHub 连接成功")
}
参数说明:
127.0.0.1:1216
: 服务端地址go-group
: 消费者组名称go-app-001
: 应用实例ID(必须唯一)token-12345
: 认证令牌(开启权限验证时)
基础使用
发布订阅
// 订阅消息
client.Subscribe("user-login", func(message string) {
log.Println("收到消息:", message)
})
// 发布消息
err := client.Publish("user-login", "用户登录")
if err != nil {
log.Println("发布失败:", err)
}
广播消息
// 广播消息给所有客户端
err := client.Broadcast("topic-abc", "hello!")
if err != nil {
log.Println("广播失败:", err)
}
RPC 调用
// 服务端:提供 RPC 服务
client.RpcSubscribe("user-get-info", func(request string) string {
return "用户信息: " + request
})
// 客户端:调用 RPC 服务
result, err := client.Rpc("user-get-info", "user123")
if err != nil {
log.Println("RPC 失败:", err)
} else {
log.Println("RPC 结果:", result)
}
延时消息
// 延时5秒发送消息
err := client.Delay("task-reminder", "任务提醒", 5000)
if err != nil {
log.Println("延时消息失败:", err)
}
完整示例
package main
import (
"log"
"time"
"github.com/your-org/zhub-client-go"
)
func main() {
// 创建客户端
client := zhub.NewClient("127.0.0.1:1216", "go-demo", "go-demo-001", "token-12345")
// 连接服务
err := client.Connect()
if err != nil {
log.Fatal("连接失败:", err)
}
defer client.Close()
log.Println("ZHub 连接成功")
// 订阅消息
client.Subscribe("user-login", func(message string) {
log.Println("收到用户登录消息:", message)
})
// 发布消息
err = client.Publish("user-login", "用户ID: 12345")
if err != nil {
log.Println("发布失败:", err)
}
// 广播消息
err = client.Broadcast("topic-abc", "hello!")
if err != nil {
log.Println("广播失败:", err)
}
// 延时消息
err = client.Delay("task-reminder", "任务提醒", 5000)
if err != nil {
log.Println("延时消息失败:", err)
}
// 提供 RPC 服务
client.RpcSubscribe("user-get-info", func(userId string) string {
return "用户信息: " + userId
})
// 调用 RPC 服务
result, err := client.Rpc("user-get-info", "user123")
if err != nil {
log.Println("RPC 失败:", err)
} else {
log.Println("RPC 结果:", result)
}
// 保持程序运行
time.Sleep(time.Minute)
}
注意事项
1. AppID 唯一性
重要
- 每个客户端必须使用不同的 appid
- RPC 通讯消息回复地址使用 appid 标识
- 相同 appid 会导致 RPC 消息回复找不到目标客户端
推荐命名规则:
go-service-001
go-worker-002
go-gateway-001
2. 错误处理
// 建议的错误处理方式
if err := client.Publish("topic-abc", "message"); err != nil {
log.Printf("发布消息失败: %v", err)
// 根据业务需要决定是否重试
}
3. 连接管理
// 检查连接状态
if !client.IsConnected() {
log.Println("客户端未连接")
return
}
// 重连机制
for {
if !client.IsConnected() {
err := client.Connect()
if err != nil {
log.Printf("重连失败: %v", err)
time.Sleep(time.Second * 5)
continue
}
log.Println("重连成功")
}
time.Sleep(time.Second)
}
版本信息
- 客户端版本: 待发布
- 支持 Go 版本: 1.19+
- 包管理: go mod
说明
- Go 客户端提供基础的发布订阅、广播、RPC 功能
- 连接参数与 Java 客户端保持一致
- 详细 API 请参考客户端源码文档