设为首页 加入收藏

TOP

golang微服务框架go-micro 入门笔记2.4 go-micro service解读(一)
2019-09-04 00:56:33 】 浏览:127
Tags:golang 服务 框架 go-micro 入门 笔记 2.4 service 解读

本章节阐述go-micro 服务发现原理

go-micro架构

下图来自go-micro官方

阅读本文前你可能需要进行如下知识储备

Service

实现如下接口的,都是Service

type Service interface {
    Init(...Option)
    Options() Options
    Client() client.Client
    Server() server.Server
    Run() error
    String() string
}

我们根据常见的service初始化流程来理解这个接口


func main() {
    // New Service
    service := micro.NewService(
        micro.Name("go.micro.srv.broker"),
        micro.Version("latest"),
    )

    // Initialise service
    service.Init()

    // Register Struct as Subscriber
    micro.RegisterSubscriber("go.micro.srv.broker", service.Server(), new(subscriber.Broker))

    // Register Function as Subscriber
    micro.RegisterSubscriber("go.micro.srv.broker", service.Server(), subscriber.Handler)

    // Run service
    if err := service.Run(); err != nil {
        log.Fatal(err)
    }
}

micro.NewService

micro.NewService的函数调用关系如下
micro.NewService的函数调用关系如下
该函数主要是初始化一个service并设置service的常用属性属性,代码如下:

opt := micro.Options{
    Broker: broker.DefaultBroker,
    Cmd: cmd.DefaultCmd,
    Client: client.DefaultClient,
    Server: server.DefaultServer,
    Registry: registry.DefaultRegistry
    }

micro.Options全部属性包含如下几个方面

type micro.Options struct {
    Broker    broker.Broker  //订阅事件用的
    Cmd       cmd.Cmd       //命令行用的
    Client    client.Client  //作为服务消费者,用来发送请求
    Server    server.Server  //作为服务提供者用来监听请求
    Registry  registry.Registry //这个是服务发现支持
    Transport transport.Transport //这是网络传递用的

    // Before and After funcs     
    BeforeStart []func() error //服务start钱的回调函数
    BeforeStop  []func() error //服务stop后的回调函数
    AfterStart  []func() error //服务start后的回调函数
    AfterStop   []func() error //服务stop后的回调函数
    // Other options for implementations of the interface
    // can be stored in a context
    Context context.Context   //有时候服务需要携带一些参数,需要规定时间内返回,可以用这个来承载
}

我们可以通过micro.Options.Server.Options获得server的属性,实际上server还有其他的属性,server的全部参数属性如下

type server.Options struct {
    Codecs       map[string]codec.NewCodec //订阅事件用的
    Broker       broker.Broker             //订阅事件用的
    Registry     registry.Registry        //这个是服务发现支持
    Transport    transport.Transport     //节点之间网络传递用的
    Metadata     map[string]string       //传递一些k,v数据用
    Name         string                  //名称
    Address      string                 //服务地址
    Advertise    string                  //广播地址
    Id           string                //服务ID
    Version      string                 //处理程序wrapper
    HdlrWrappers []HandlerWrapper            //网络处理程序封装
    SubWrappers  []SubscriberWrapper        //订阅程序封装

    // RegisterCheck runs a check function before registering the service
    RegisterCheck func(context.Context) error   //注册服务前的校验函数
    // The register expiry time
    RegisterTTL time.Duration                      //注册服务生命周期,过了这么长事件需要重新注册
    // The interval on which to register
    RegisterInterval time.Duration                     //多长时间注册一次

    // The router for requests
    Router Router     //请求的路由表

    // Other options for implementations of the interface
    // can be stored in a context
    Context context.Context   //有时候服务需要携带一些参数,需要规定时间内返回,可以用这个来承载
}

如果server需要配置额外的属性,则调用属性配置函数来刷新配置。如Name()运行结果是返回一个函数,因此最后通过server.Name(name)来刷新这个函数,

micro.Name("go.micro.srv.broker"),
// Name of the service
func Name(n string) Option {
    return func(o *Options) {
        o.Server.Init(server.Name(n))
    }
}

函数关系如下
micro.NewService的函数调用关系如下

注意最后的o.Name即设置service.Options.Name = name
micro.Version("latest")也是一样的

service.Init

init 函数原型如下

func (s *service) Init(opts ...Option) {
    // process options
    for
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇解决vscode中golang插件依赖安装.. 下一篇深度解密Go语言之 scheduler

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目