(15)go-micro微服务main.go开发
2024-09-08 18:20:29
目录
一 导包
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链路追踪的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。
欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击
最新文章
- Android Studio解决未识别Java文件(出现红J)问题
- C# 使用网易邮箱发送邮件
- 深入了解 JavaScript 中的 for 循环
- POJ 1330
- Bootstrap_导航
- Linux 多线程应用中如何编写安全的信号处理函数
- 高效率的全组合算法(Java版实现)
- SecureCRT介绍、安装、使用
- javascript对象继承的实现
- 《小猪CMS(PigCms)多用户微信营销服务平台系统V6.1完美破解至尊版带微用户管理CRM+微信支付》
- table插入标签form标记怪现象
- Web VLC 设置 tcp 协议播放
- gradle windows 环境变量
- STM32f4 ARM Bootloader
- javascript右键菜单分析
- c++中的回调
- 转载:UML学习(四)-----状态图(silent)
- java容器Container和组件Component之GUI
- C# webbrowser遍历网页元素
- Inondb中的checkpoint
热门文章
- FastAPI + tortoise-orm基础使用
- [zoj] 4178. Killing the Brute-force
- C#文件路径
- day02-实现01
- JUnit 5 单元测试教程
- 【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(三)
- .NET 7 的 AOT 到底能不能扛反编译?
- Mybatis SQL 对应Oracle中javaType和jdbcType对应
- Excel2010表格内容被加密,无法编辑内容。
- 笔试面试--Java基础知识