README
¶
go-boot-nacos
基于 go-boot 的 Nacos 注册中心与配置中心集成模块。将 Nacos 无缝集成到 go-boot 的 IoC 容器和自动配置体系中,提供服务注册、服务发现、配置加载和配置监听能力。
设计理念:遵循 go-boot 的开发规范,将 Nacos 作为
center.Registry和config.ConfigCenter接口的实现,通过自动配置实现零代码启动服务注册与配置管理。
整体架构
┌───────────────────────────────────────────────────────────────────────┐
│ go-boot ApplicationContext │
│ ┌───────────┐ ┌──────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Container │ │ Environment │ │ Lifecycle │ │ EventBus │ │
│ └───────────┘ └──────────────┘ └───────────┘ └───────────┘ │
│ ┌─────────────────────┐ │
│ │ AutoConfig Registry │ │
│ └─────────────────────┘ │
└───────────────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────┐
│ go-boot-nacos Starter │
│ ┌─────────────────────────┐ │
│ │ NacosRegistry Bean │ │
│ │ (center.Registry) │ │
│ │ NacosConfigCenter Bean │ │
│ │ (config.ConfigCenter) │ │
│ │ Naming & Config Client │ │
│ └─────────────────────────┘ │
└───────────────────────────────┘
目录
快速开始
安装
# 安装核心框架
go get github.com/xudefa/go-boot
# 安装 Nacos 集成模块
go get github.com/xudefa/go-boot-nacos
最小示例
package main
import (
"github.com/xudefa/go-boot/boot"
"github.com/xudefa/go-boot/center"
)
func main() {
app, err := boot.NewApplication(
boot.WithAppName("my-service"),
boot.WithVersion("1.0.0"),
boot.WithProperty("nacos.enabled", "true"),
boot.WithProperty("nacos.address", "127.0.0.1:8848"),
)
if err != nil {
panic(err)
}
defer app.Stop()
// 获取注册中心(自动注入)
registry := app.Container().Get("nacosRegistry").(center.Registry)
// 注册服务
registry.Register(context.Background(), center.InstanceInfo{
ServiceName: "my-service",
Host: "127.0.0.1",
Port: 8080,
})
// 发现服务
instances, _ := registry.Discover(context.Background(), "my-service")
for _, inst := range instances {
fmt.Printf("发现实例: %s:%d\n", inst.Host, inst.Port)
}
app.Start()
app.WaitForSignal()
}
功能特性
| 特性 | 说明 |
|---|---|
| 注册中心 | 实现 go-boot center.Registry 接口 |
| 配置中心 | 实现 go-boot config.ConfigCenter 接口 |
| 自动配置 | 通过 nacos.enabled=true 自动启用 |
| 命名空间 | 支持 Nacos Namespace 隔离 |
| 分组管理 | 支持 Group 分组管理服务和配置 |
| 服务订阅 | 支持 Subscribe/Unsubscribe 监听实例变化 |
| 配置监听 | 支持配置变更的实时监听 |
| 函数式选项 | 灵活的连接配置(Address、Namespace、Group 等) |
服务注册与发现
创建注册中心
registry, err := nacos.NewNacosRegistry(
nacos.WithAddress("127.0.0.1:8848"),
nacos.WithNamespace("dev"),
nacos.WithGroup("DEFAULT_GROUP"),
)
注册服务
registry.Register(ctx, center.InstanceInfo{
ServiceName: "user-service",
ID: "instance-001",
Host: "127.0.0.1",
Port: 8080,
Weight: 10,
Healthy: true,
Metadata: map[string]string{"version": "1.0.0"},
})
发现服务
instances, err := registry.Discover(ctx, "user-service")
监听服务变化
ch, err := registry.Watch(ctx, "user-service")
for instances := range ch {
fmt.Printf("当前在线实例: %d\n", len(instances))
}
配置中心
启用配置中心
# application.yml
nacos:
enabled: true
address: "127.0.0.1:8848"
config-center:
enabled: true
data-id: "app-config.yaml"
group: "DEFAULT_GROUP"
加载配置
configCenter := app.Container().Get("configCenter").(config.ConfigCenter)
data, err := configCenter.Load()
监听配置变更
configCenter.Watch("app-config.yaml", func(data config.ConfigData) {
fmt.Printf("配置已更新: %v\n", data)
})
配置选项
通过 boot.WithProperty() 或配置文件设置:
| 配置项 | 默认值 | 说明 |
|---|---|---|
nacos.enabled |
false |
是否启用 Nacos 注册中心 |
nacos.address |
localhost:8848 |
Nacos 服务端地址 |
nacos.namespace |
`` | 命名空间 ID |
nacos.group |
DEFAULT_GROUP |
服务分组 |
nacos.log-level |
info |
日志级别(debug/info/warn/error) |
nacos.config-center.enabled |
false |
是否启用配置中心 |
nacos.config-center.data-id |
app-config |
配置 DataID |
nacos.config-center.group |
DEFAULT_GROUP |
配置分组 |
示例配置
# application.yml
nacos:
enabled: true
address: "127.0.0.1:8848"
namespace: "dev"
group: "DEFAULT_GROUP"
log-level: "info"
config-center:
enabled: true
data-id: "my-app.yaml"
group: "DEFAULT_GROUP"
项目结构
go-boot-nacos/
├── nacos/
│ ├── registry.go # NacosRegistry 实现 center.Registry
│ ├── config.go # 配置选项(Config, Option)
│ ├── config_center.go # NacosConfigCenter 实现 config.ConfigCenter
│ ├── autoconfig.go # 自动配置注册
│ ├── registry_test.go # 注册中心测试
│ └── config_center_test.go # 配置中心测试
├── README.md
├── LICENSE
└── go.mod
开发指南
构建
go build ./...
测试
go test ./...
go test -cover ./... # 带覆盖率
go test -race ./... # 数据竞争检测
代码规范
go fmt ./...
golangci-lint run
贡献
欢迎提交 Issue 和 Pull Request!详细贡献指南请参阅 CONTRIBUTING.md。
许可证
本项目采用 MIT 许可证 — 详情请参阅 LICENSE 文件。
Click to show internal directories.
Click to hide internal directories.