一 导包
import ( micro2 "account/common/micro" "account/config/logger" "account/config/mysql" "account/config/redis" "account/domain/repository" "account/domain/service" "account/handler" "account/proto/account" "fmt" _ "github.com/jinzhu/gorm/dialects/mysql" "github.com/micro/go-micro/v2" "github.com/micro/go-micro/v2/registry" "github.com/micro/go-plugins/registry/consul/v2" "go.uber.org/zap" )
二 配置中心
// 1.配置中心 consulConfig, err := micro2.GetConsulConfig("localhost", 8500, "/micro/config") if err != nil { fmt.Printf("Init consulConfig failed, err: %v\n", err) }
三 注册中心
// 2.注册中心 consulRegistry := consul.NewRegistry(func(options *registry.Options) { options.Addrs = []string{ "127.0.0.1:8500", } }) if err := micro2.GetAccountFromConsul(consulConfig, "account"); err != nil { fmt.Printf("Init consul failed, err: %v\n", err) } fmt.Println(micro2.ConsulInfo)
四 zap日志初始化
// 3.zap日志初始化 if err := logger.Init(); err != nil { fmt.Printf("Init logger failed, err: %v\n", err) return } defer zap.L().Sync()
五 初始化Mysql数据库
// 5.初始化数据库 db, err := mysql.MysqlInit(micro2.ConsulInfo.Mysql.User, micro2.ConsulInfo.Mysql.Pwd, micro2.ConsulInfo.Mysql.Database) if err != nil { logger.Error(err) return } defer db.Close() // 创建实例 accountService := service.NewUserService(repository.NewUserRepository(db))
六 初始化Redis连接
// 6.初始化Redis连接 if err := redis.Init(); err != nil { logger.Error(err) return } defer redis.Close()
七 注册服务
// 8.注册服务 registryService := micro.NewService( micro.Name(micro2.ConsulInfo.Micro.Name), micro.Version(micro2.ConsulInfo.Micro.Version), //暴露的服务地址 micro.Address(micro2.ConsulInfo.Micro.Address), //添加consul 注册中心 micro.Registry(consulRegistry), )
八 初始化服务
// 9.初始化服务 registryService.Init()
九 注册 handle
// 10.注册Handle account.RegisterAccountHandler(registryService.Server(), &handler.Account{AccountService: accountService})
十 启动服务
// 11.启动服务 if err := registryService.Run(); err != nil { logger.Fatal(err) }
十一 main.go全部代码
package main import ( micro2 "account/common/micro" "account/config/logger" "account/config/mysql" "account/config/redis" "account/domain/repository" "account/domain/service" "account/handler" "account/proto/account" "fmt" _ "github.com/jinzhu/gorm/dialects/mysql" "github.com/micro/go-micro/v2" "github.com/micro/go-micro/v2/registry" "github.com/micro/go-plugins/registry/consul/v2" "go.uber.org/zap" ) func main() { // 1.配置中心 consulConfig, err := micro2.GetConsulConfig("localhost", 8500, "/micro/config") if err != nil { fmt.Printf("Init consulConfig failed, err: %v\n", err) } // 2.注册中心 consulRegistry := consul.NewRegistry(func(options *registry.Options) { options.Addrs = []string{ "127.0.0.1:8500", } }) if err := micro2.GetAccountFromConsul(consulConfig, "account"); err != nil { fmt.Printf("Init consul failed, err: %v\n", err) } fmt.Println(micro2.ConsulInfo) // 3.zap日志初始化 if err := logger.Init(); err != nil { fmt.Printf("Init logger failed, err: %v\n", err) return } defer zap.L().Sync() // 5.初始化数据库 db, err := mysql.MysqlInit(micro2.ConsulInfo.Mysql.User, micro2.ConsulInfo.Mysql.Pwd, micro2.ConsulInfo.Mysql.Database) if err != nil { logger.Error(err) return } defer db.Close() // 创建实例 accountService := service.NewUserService(repository.NewUserRepository(db)) // 6.初始化Redis连接 if err := redis.Init(); err != nil { logger.Error(err) return } defer redis.Close() // 8.注册服务 registryService := micro.NewService( micro.Name(micro2.ConsulInfo.Micro.Name), micro.Version(micro2.ConsulInfo.Micro.Version), //暴露的服务地址 micro.Address(micro2.ConsulInfo.Micro.Address), //添加consul 注册中心 micro.Registry(consulRegistry), ) // 9.初始化服务 registryService.Init() // 10.注册Handle account.RegisterAccountHandler(registryService.Server(), &handler.Account{AccountService: accountService}) // 11.启动服务 if err := registryService.Run(); err != nil { logger.Fatal(err) } }
- 至此,可以运行项目了,运行成功后出现下图,即可开发成功
- 记得把consul运行起来,因为项目中使用了consul
- 如果报错,可以私信博主或者加入博主的学习交流qun询问都可
十二 最后
- 至此,go-micro微服务项目main.go开发工作就正式完成。
- 接下来就开始jaeger链路追踪的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。