经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Go Micro Dashboard - 实现细节(一)
来源:cnblogs  作者:xpunch  时间:2021/12/20 15:52:57  对本文有异议

前言

Go Micro Dashboard是基于go-microng-alain开发的, 它既是go-micro开发过程中的工具,也可以作为学习go-micro的实际案例。接下来我将会详细介绍一下这个项目的一些实现细节。

一、服务列表

服务的发现与注册,是分布式微服务中重要的基础模块,单个服务通过服务注册将节点信息公开出去,并通过服务发现获取其他服务的节点信息。

go-micro中Registry注册中心的定义

  1. // The registry provides an interface for service discovery
  2. type Registry interface {
  3. Init(...Option) error
  4. Options() Options
  5. Register(*Service, ...RegisterOption) error
  6. Deregister(*Service, ...DeregisterOption) error
  7. GetService(string, ...GetOption) ([]*Service, error)
  8. ListServices(...ListOption) ([]*Service, error)
  9. Watch(...WatchOption) (Watcher, error)
  10. String() string
  11. }

Server启动后,都会将自己的Host、Port、Version、Handler、Subscriber、Metadata等信息封装到registry.Service里,然后注册到Registry。

Client在请求时通过GetService获取服务节点信息,并通过Selector中的负载均衡策略选择服务节点。

Go Micro Dashboard通过ListServices获取所有注册的服务,并将Service列表按名称和版本分组。

如下图所示,当前系统中运行的服务服务及对应版本一览无遗,可以点击服务名称或版本号快速查看服务详细信息。

二、服务详情

通过registry.GetService可以获取到服务的详细信息,包括Version、Endpoints、Nodes等。

go-micro中Service注册服务的定义

  1. type Service struct {
  2. Name string `json:"name"`
  3. Version string `json:"version"`
  4. Metadata map[string]string `json:"metadata"`
  5. Endpoints []*Endpoint `json:"endpoints"`
  6. Nodes []*Node `json:"nodes"`
  7. } 

服务启动后会将Handler和Subscriber都注册到Endpoints中,Handler代表对外提供的RPC服务,Subscriber代表订阅的异步消息。

其中Subscriber的Metadata中subscriber为true。

  1. func isSubscriber(ep *registry.Endpoint) bool {
  2. if ep == nil || len(ep.Metadata) == 0 {
  3. return false
  4. }
  5. if s, ok := ep.Metadata["subscriber"]; ok && s == "true" {
  6. return true
  7. }
  8. return false
  9. }

将Service拆分为Nodes、Handlers、Subscribers,就得到下图中的服务详细信息。

三、节点列表

通过registry.ListService获取所有服务信息,并将其中所有Nodes按照服务名称分组,就得到了下图中的所有节点列表。

服务启动时,会自动注册健康检查的Handler,我们可以通过这个来对节点进行健康检查。

  1. debugService := debug.NewDebugService(req.Service, c)
  2. reply, err := debugService.Health(ctx, &debug.HealthRequest{}, callOpts...)

如果节点运行正常,会返回Status: ok。

debug/handler/debug.go

  1. func (d *Debug) Health(ctx context.Context, req *proto.HealthRequest, rsp *proto.HealthResponse) error {
  2. rsp.Status = "ok"
  3. return nil
  4. }

 

总结

本文介绍了Go Micro Dashboard利用Registry查看微服务信息的内部实现,也介绍了go-micro中对应的一些概念。

项目地址:github.com/xpunch/go-micro-dashboard

原文链接:http://www.cnblogs.com/xpunch/p/15705227.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号