跳到主要内容

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 请参考客户端源码文档