go-micro,v5启动微服务的正确方法

go-micro.dev/v5版本与旧版本api接口的使用方法不一样,经过测试发现以下两种方法可以实现微服务的正常启动

Go 复制代码
package main

import (
	"getCaptcha/handler"
	pb "getCaptcha/proto"

	// 新增:用于设置环境变量
	"go-micro.dev/v5"

	"github.com/micro/plugins/v5/registry/consul"
	"go-micro.dev/v5/registry"
)

func main() {
	// 1. 显式初始化 Consul 注册中心(指定 Consul 地址,兼容所有 v5 版本)
	// 这里直接使用 consul.NewRegistry(),并通过 consul.Addrs() 配置地址
	consulReg := consul.NewRegistry(
		registry.Addrs("127.0.0.1:8500"), // 你的 Consul 服务地址(默认端口 8500)
	)
	// if err != nil {
	// 	panic(err)
	// }

	// 关键步骤:通过环境变量指定 Consul 地址(go-micro 所有版本都支持)
	// 环境变量 "MICRO_REGISTRY" 用于指定注册中心类型(这里填 consul)
	// 环境变量 "MICRO_REGISTRY_ADDRESS" 用于指定 Consul 服务地址
	// os.Setenv("MICRO_REGISTRY", "consul")
	// os.Setenv("MICRO_REGISTRY_ADDRESS", "127.0.0.1:8500")

	// 1. 创建微服务实例:直接在选项中配置 Consul 地址,无需单独初始化 registry
	// 核心:通过 registry.Option 类型的 "registry.address" 配置 Consul 地址
	service := micro.NewService(
		// 服务名称(必须唯一,用于服务发现)
		micro.Name("go.micro.srv.getCaptcha"), // 服务唯一名称(服务发现用)
		micro.Registry(consulReg),             // 关键:绑定 Consul 注册中心
		// 配置 Consul 注册中心地址(关键:指定你的 Consul 服务地址)
		// micro.RegistryAddr("127.0.0.1:8500"),
		micro.Address("192.168.1.35:18901"), //服务地址,防止随机生成端口冲突
		// 关键:通过 micro.Registry 选项配置 Consul 地址(兼容所有 v5 版本)
		// micro.Registry(registry.NewRegistry(
		// 	// 通过 registry.Addrs() 配置 Consul 服务地址(兼容所有 v5 版本)
		// 	registry.Addrs("127.0.0.1:8500"), // 这里填写你的 Consul 地址和端口
		// 	// 显式指定使用 consul 作为注册中心驱动
		// 	// registry.Plugin("consul"),
		// )),
		// 指定服务版本(可选,用于区分不同版本的微服务)
		// micro.Version("v1"),

	)

	//  2. 必须调用 Init() 完成服务内部初始化(v5 版本强制要求,加载配置/注册中心等)
	service.Init()

	// 3. 注册业务处理器(将自定义 handler 与 proto 接口绑定)
	if err := pb.RegisterGetCaptchaHandler(service.Server(), handler.New()); err != nil {
		panic("注册处理器失败: " + err.Error())
	}

	// 4. 启动服务(监听请求并注册到 Consul)
	if err := service.Run(); err != nil {
		panic("服务启动失败: " + err.Error())
	}
}

第二种是环境变量的方法:

Go 复制代码
package main

import (
	"getCaptcha/handler"
	pb "getCaptcha/proto"
	"os" // 新增:用于设置环境变量

	"go-micro.dev/v5"

	// 新增:导入 Consul 注册中心实现
	_ "github.com/micro/plugins/v5/registry/consul"
)

func main() {
	// 1. 显式初始化 Consul 注册中心(指定 Consul 地址,兼容所有 v5 版本)
	// 这里直接使用 consul.NewRegistry(),并通过 consul.Addrs() 配置地址
	// consulReg := consul.NewRegistry(
	// 	consul.Addrs("127.0.0.1:8500"), // 你的 Consul 服务地址(默认端口 8500)
	// )
	// if err != nil {
	// 	panic(err)
	// }

	// 关键步骤:通过环境变量指定 Consul 地址(go-micro 所有版本都支持)
	// 环境变量 "MICRO_REGISTRY" 用于指定注册中心类型(这里填 consul)
	// 环境变量 "MICRO_REGISTRY_ADDRESS" 用于指定 Consul 服务地址
	os.Setenv("MICRO_REGISTRY", "consul")
	os.Setenv("MICRO_REGISTRY_ADDRESS", "127.0.0.1:8500")

	// 1. 创建微服务实例:直接在选项中配置 Consul 地址,无需单独初始化 registry
	// 核心:通过 registry.Option 类型的 "registry.address" 配置 Consul 地址
	service := micro.NewService(
		// 服务名称(必须唯一,用于服务发现)
		micro.Name("go.micro.srv.getCaptcha"), // 服务唯一名称(服务发现用)
		// micro.Registry(consulReg),             // 关键:绑定 Consul 注册中心
		// 配置 Consul 注册中心地址(关键:指定你的 Consul 服务地址)
		// micro.RegistryAddr("127.0.0.1:8500"),
		micro.Address("192.168.1.35:18901"), //服务地址,防止随机生成端口冲突
		// 关键:通过 micro.Registry 选项配置 Consul 地址(兼容所有 v5 版本)
		// micro.Registry(registry.NewRegistry(
		// 	// 通过 registry.Addrs() 配置 Consul 服务地址(兼容所有 v5 版本)
		// 	registry.Addrs("127.0.0.1:8500"), // 这里填写你的 Consul 地址和端口
		// 	// 显式指定使用 consul 作为注册中心驱动
		// 	// registry.Plugin("consul"),
		// )),
		// 指定服务版本(可选,用于区分不同版本的微服务)
		// micro.Version("v1"),

	)

	//  2. 必须调用 Init() 完成服务内部初始化(v5 版本强制要求,加载配置/注册中心等)
	service.Init()

	// 3. 注册业务处理器(将自定义 handler 与 proto 接口绑定)
	if err := pb.RegisterGetCaptchaHandler(service.Server(), handler.New()); err != nil {
		panic("注册处理器失败: " + err.Error())
	}

	// 4. 启动服务(监听请求并注册到 Consul)
	if err := service.Run(); err != nil {
		panic("服务启动失败: " + err.Error())
	}
}

启动成功后的提示:

bash 复制代码
go run main.go
2025-12-14 23:24:15  file=getCaptcha/main.go:60 level=info Starting [service] go.micro.srv.getCaptcha
2025-12-14 23:24:15  file=service/service.go:95 level=info Transport [http] Listening on 192.168.1.35:18901
2025-12-14 23:24:15  file=service/service.go:95 level=info Broker [http] Connected to 127.0.0.1:51920      
2025-12-14 23:24:15  file=server/rpc_server.go:561 level=info Registry [consul] Registering node: go.micro.srv.getCaptcha-ca7d4e59-4db1-4d0c-8806-f319e01bcbc2
日志内容 含义
Starting [service] go.micro.srv.getCaptcha 微服务开始启动,服务名正确(与你配置的 micro.Name 一致)
Transport [http] Listening on 192.168.1.35:18901 服务已在你指定的地址 192.168.1.35:18901 监听请求(端口未冲突,配置生效)
Broker [http] Connected to 127.0.0.1:51920 微服务的消息代理(Broker)组件启动成功,用于服务间通信
Registry [consul] Registering node: ... 最关键的一行!表示微服务正在向 Consul 注册中心 注册节点(节点 ID 已生成),说明 Consul 注册逻辑完全生效

可以在浏览器中查看consul的情况:http://127.0.0.1:8500/

相关推荐
文艺理科生32 分钟前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
前端·后端·架构
千寻girling33 分钟前
主管:”人家 Node 框架都用 Nest.js 了 , 你怎么还在用 Express ?“
前端·后端·面试
少控科技33 分钟前
QT第6个程序 - 网页内容摘取
开发语言·qt
darkb1rd33 分钟前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
南极企鹅35 分钟前
springBoot项目有几个端口
java·spring boot·后端
历程里程碑36 分钟前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
Luke君6079736 分钟前
Spring Flux方法总结
后端
郝学胜-神的一滴38 分钟前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
define952740 分钟前
高版本 MySQL 驱动的 DNS 陷阱
后端
承渊政道42 分钟前
Linux系统学习【Linux系统的进度条实现、版本控制器git和调试器gdb介绍】
linux·开发语言·笔记·git·学习·gitee