微服务框架笔记

105 阅读1分钟

注册组件

选项模式

package main

type Options struct{
    StrOption1 string
    StrOption2 string
    IntOption1 int
    IntOption2 int
}

type Option func(opts *Options)

func WithStringOption1(str string)Option{
    return func(opts *Options){
        opts.StrOption1 = str
    }
}

func WithStringOption2(str string)Option{
    return func(opts *Options) {
        opts.StrOption2 = str
    }
}

func WithIntOption1(num int)Option{
    return func(opts *Options){
        opts.IntOption1 = num
    }
}

func WithIntOption2(num int)Option{
    return func(opts *Options){
        opts.IntOption2 = num
    }
}

// 初始化选项
func InitOption(opts ...Option){
    options:=&Options{}

    for _,opt:=range opts{
        opt(options)
    }
}

func main(){
    InitOption(
                            WithStringOption1("one"),
                            WithStringOption2("two"),
                            WithIntOption1(12),
                            WithIntOption2(16)
    )
}


插件设计

  • 插件抽象
    • 实现Registry接口,就是一个注册插件
      • 基于etcd的注册插件
      • 基于consul的注册插件
  • 插件管理
    • 提供RegistryPlugin函数,用来注册插件
    • 基于名字对插件进行管理
    • 插件初始化,通过名字对插件进行初始化