go-boot-nacos

module
v1.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 24, 2026 License: MIT

README

go-boot-nacos

Go Version License Build Status Go Reference Go Report Card

基于 go-boot 的 Nacos 注册中心与配置中心集成模块。将 Nacos 无缝集成到 go-boot 的 IoC 容器和自动配置体系中,提供服务注册、服务发现、配置加载和配置监听能力。

设计理念:遵循 go-boot 的开发规范,将 Nacos 作为 center.Registryconfig.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 文件。

Directories

Path Synopsis
Package nacos 提供 Nacos 注册中心的自动配置。
Package nacos 提供 Nacos 注册中心的自动配置。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL