(23)go-micro微服务客户端开发(使用负载均衡)

一 main.go开发

  • 至此,咱们的项目服务端代码,已经开发完毕,现在来看一下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"    "github.com/micro/go-plugins/wrapper/monitoring/prometheus/v2"    ratelimit "github.com/micro/go-plugins/wrapper/ratelimiter/uber/v2"    opentracing2 "github.com/micro/go-plugins/wrapper/trace/opentracing/v2"    "github.com/opentracing/opentracing-go"    "go.uber.org/zap" )  func main() {    // 1.配置中心    consulConfig, err := micro2.GetConsulConfig("localhost", 8500, "/micro/config")    if err != nil {       fmt.Printf("Init consulConfig failed, err: %vn", 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: %vn", err)    }    fmt.Println(micro2.ConsulInfo)    // 3.zap日志初始化    if err := logger.Init(); err != nil {       fmt.Printf("Init logger failed, err: %vn", err)       return    }    defer zap.L().Sync()    // 4.jaeger 链路追踪    t, io, err := micro2.NewTracer(micro2.ConsulInfo.Jaeger.ServiceName, micro2.ConsulInfo.Jaeger.Addr)    if err != nil {       logger.Error(err)       return    }    defer io.Close()    opentracing.SetGlobalTracer(t)    // 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()    // 7.暴露监控地址    micro2.PrometheusBoot(micro2.ConsulInfo.Prometheus.Host, int(micro2.ConsulInfo.Prometheus.Port))    // 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),       //添加链路追踪       micro.WrapHandler(opentracing2.NewHandlerWrapper(opentracing.GlobalTracer())),       //添加限流       micro.WrapHandler(ratelimit.NewHandlerWrapper(int(micro2.ConsulInfo.Ratelimit.QPS))),       //添加监控       micro.WrapHandler(prometheus.NewHandlerWrapper()),    )    // 9.初始化服务    registryService.Init()    // 10.注册Handle    account.RegisterAccountHandler(registryService.Server(), &handler.Account{AccountService: accountService})    // 11.启动服务    if err := registryService.Run(); err != nil {       logger.Fatal(err)    } } 

二 客户端代码开发:

  • 在client目录下新建一个account.go文件,写入以下代码,完成客户端的建立:
package main  import (    micro2 "account/common/micro"    "account/config/logger"    "account/proto/account"    "context"    "fmt"    "github.com/micro/go-micro/v2"    "github.com/micro/go-micro/v2/registry"    "github.com/micro/go-plugins/registry/consul/v2"    "github.com/micro/go-plugins/wrapper/select/roundrobin/v2"    opentracing2 "github.com/micro/go-plugins/wrapper/trace/opentracing/v2"    "github.com/opentracing/opentracing-go"    "go.uber.org/zap" )  func main() {    // 1.配置中心    consulConfig, err := micro2.GetConsulConfig("localhost", 8500, "/micro/config")    if err != nil {       fmt.Printf("Init consulConfig failed, err: %vn", err)    }    // 2.注册中心    newConsul := 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: %vn", err)    }    fmt.Println(micro2.ConsulInfo)    // 3.zap日志初始化    if err := logger.Init(); err != nil {       fmt.Printf("Init logger failed, err: %vn", err)       return    }    defer zap.L().Sync()    logger.Debug("logger init success...")     // 4.链路追踪    t, io, err := micro2.NewTracer("go.micro.service.account", "localhost:6831")    if err != nil {       logger.Fatal(err)    }    defer io.Close()    opentracing.SetGlobalTracer(t)    // 5.监控    micro2.PrometheusBoot("127.0.0.1", 9292)    // 6.设置服务    service := micro.NewService(       micro.Name("go.micro.service.account.client"),       micro.Version("latest"),       //暴露的服务地址       micro.Address("127.0.0.1:9580"),       //添加注册中心       micro.Registry(newConsul),       //绑定链路追踪       micro.WrapClient(opentracing2.NewClientWrapper(opentracing.GlobalTracer())),       //添加监控       micro.WrapHandler(opentracing2.NewHandlerWrapper(opentracing.GlobalTracer())),       //作为服务端访问时生效       micro.WrapClient(opentracing2.NewClientWrapper(opentracing.GlobalTracer())),       //负载均衡       micro.WrapClient(roundrobin.NewClientWrapper()),    )    // 7.创建服务    accountService := account.NewAccountService("go.micro.service.account", service.Client()) 

三 客户端测试功能

1.发送注册邮件

// 8.发送注册邮件 registerMail := &account.SendMailRequest{Email: "xxx@qq.com"} registerMailResponse, err := accountService.SendRegisterMail(context.TODO(), registerMail) if err != nil {    logger.Error(err) } fmt.Println(registerMailResponse) 

2.实现注册功能

// 9.实现注册功能 accountAdd := &account.RegisterRequest{    RegisterRequest: &account.UserInfoResponse{       Username:  "夏沫の梦",       FirstName: "qi66",       Password:  "123456",       Email:     "xxx@qq.com",       LastName:  "admin",    },    Code: registerMailResponse.Code, } registerResponse, err := accountService.Register(context.TODO(), accountAdd) if err != nil {    logger.Error(err) } fmt.Println(registerResponse) 

3.查询用户功能

// 10.查询用户功能 getUser := &account.UserIdRequest{UserId: registerResponse.UserId} userInfoResponse, err := accountService.GetUserInfo(context.TODO(), getUser) if err != nil {    logger.Error(err) } fmt.Println(userInfoResponse) 

四 运行项目

  • 运行项目之前,要把相关服务启动起来,如consul、jaeger、prometheus、grafana、ELK等等

  • 把邮箱改成你自己的哦

  • consul启动之后,记得把配置数据创建一下

  • 第一次启动,记得把mysql数据表初始化一下,之后要把初始化语句去掉,否则会报错

  • 运行main.go文件

go run main.go 
  • 运行account.go文件
go run client/account.go 
  • 如果客户端控制台成功打印出来咱们刚注册的用户信息的话,说明项目已经完成
  • 如果出现问题的话,可以自行摆渡解决,无法解决的话,可以私信博主或者加博主的学习交流询问

五 最后

  • 至此,go-micro微服务项目客户端开发(使用负载均衡)使用工作就正式完成。

  • 接下来就开始项目经验总结了,这是本专栏的最后一篇文章,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。

欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击 (23)go-micro微服务客户端开发(使用负载均衡)

发表评论

相关文章