一 导包

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

  • 如果报错,可以私信博主或者加入博主的学习交流裙询问都可

十二 最后

  • 至此,go-micro微服务项目main.go开发工作就正式完成。

  • 接下来就开始jaeger链路追踪的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。

欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击

最新文章

  1. Android Studio解决未识别Java文件(出现红J)问题
  2. C# 使用网易邮箱发送邮件
  3. 深入了解 JavaScript 中的 for 循环
  4. POJ 1330
  5. Bootstrap_导航
  6. Linux 多线程应用中如何编写安全的信号处理函数
  7. 高效率的全组合算法(Java版实现)
  8. SecureCRT介绍、安装、使用
  9. javascript对象继承的实现
  10. 《小猪CMS(PigCms)多用户微信营销服务平台系统V6.1完美破解至尊版带微用户管理CRM+微信支付》
  11. table插入标签form标记怪现象
  12. Web VLC 设置 tcp 协议播放
  13. gradle windows 环境变量
  14. STM32f4 ARM Bootloader
  15. javascript右键菜单分析
  16. c++中的回调
  17. 转载:UML学习(四)-----状态图(silent)
  18. java容器Container和组件Component之GUI
  19. C# webbrowser遍历网页元素
  20. Inondb中的checkpoint

热门文章

  1. FastAPI + tortoise-orm基础使用
  2. [zoj] 4178. Killing the Brute-force
  3. C#文件路径
  4. day02-实现01
  5. JUnit 5 单元测试教程
  6. 【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(三)
  7. .NET 7 的 AOT 到底能不能扛反编译?
  8. Mybatis SQL 对应Oracle中javaType和jdbcType对应
  9. Excel2010表格内容被加密,无法编辑内容。
  10. 笔试面试--Java基础知识