Dubbo-go 3.0 動態(tài)配置

2022-04-15 10:34 更新

dubbogo 3.0 動態(tài)配置

Dubbogo 3.0 配置中心和配置監(jiān)聽

1. 配置中心概念

配置中心即為在分布式場景下,無法將最新的框架配置文件和應(yīng)用程序綁定在一起,可以指定好配置中心的信息,例如配置中心類型和地址,并在框架啟動時從配置中心拉取相應(yīng)配置進行啟動。

2. 配置中心的配置

參考倉庫:dubbo-go-samples/configcenter

dubbogo.yml

dubbo:
  config-center:
    protocol: nacos
    address: 127.0.0.1:8848
    data-id: dubbo-go-samples-configcenter-nacos-server
    namespace: myNamespaceID # 可選配置  nacos namespace ID, 默認是 public
    group: mygroup # 可選配置  nacos group, 默認是 DEFAULT_GROUP

配置中心 nacos 內(nèi)

group 默認為 dubbo

dataID 為指定的id:dubbo-go-samples-configcenter-nacos-server

寫入框架配置例如下面,即可正常啟動。

dubbo:
  registries:
    demoZK:
      protocol: zookeeper
      timeout: 3s
      address: 127.0.0.1:2181
  protocols:
    triple:
      name: tri
      port: 20000
  provider:
    services:
      GreeterProvider:
        interface: com.apache.dubbo.sample.basic.IGreeter 

3. Dubbogo 動態(tài)配置 API

Config API 為 dubbogo 3.0 用來操作配置結(jié)構(gòu)的 API??墒褂每蚣芴峁┑?Config API 進行配置結(jié)構(gòu)的初始化,獲取組件實例并使用。一個例子如下,包含了動態(tài)配置實例的初始化、發(fā)布配置、讀取配置、訂閱配置操作。

const configCenterNacosServerConfig = `# set in config center, group is 'dubbo', dataid is 'dubbo-go-samples-configcenter-nacos-server', namespace is default 'public'
dubbo:
  registries:
    demoZK:
      protocol: zookeeper
      address: 127.0.0.1:2181
  protocols:
    triple:
      name: tri
      port: 20000
  provider:
    services:
      GreeterProvider:
        interface: com.apache.dubbo.sample.basic.IGreeter # must be compatible with grpc or dubbo-java`

type GreeterProvider struct {
  api.GreeterProviderBase
}

func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
  logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
  return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
}

// There is no need to export DUBBO_GO_CONFIG_PATH, as you are using config api to set config
func main() {
	 // 獲取動態(tài)配置實例 dynamicConfig
  dynamicConfig, err := config.NewConfigCenterConfigBuilder().
    SetProtocol("nacos").
    SetAddress("127.0.0.1:8848").
    SetGroup("dubbo").
    Build().GetDynamicConfiguration()
  if err != nil {
    panic(err)
  }
  
  // 使用 dynamicConfig 結(jié)構(gòu)來發(fā)布配置
  if err := dynamicConfig.PublishConfig("dubbo-go-samples-configcenter-nacos-server", "dubbo", configCenterNacosServerConfig); err != nil {
    panic(err)
  }
  
   // 使用 dynamicConfig 結(jié)構(gòu)來讀取配置
  data, err := dynamicConfig.GetRule("dubbo-go-samples-configcenter-nacos-server", 	config_center.WithGroup("dubbo"))
  if err != nil{
    panic(err)
  }
  logger.Infof("get config = %s", data)
  
  
  // 使用 dynamicConfig 結(jié)構(gòu), 通過自定義listener來訂閱配置更新事件
  l := &listener{}
  dynamicConfig.AddListener("dubbo-go-samples-configcenter-nacos-server", l)
  
  time.Sleep(time.Second * 10)
  
  config.SetProviderService(&GreeterProvider{})

  // 以 API 的形式來啟動框架
  rootConfig := config.NewRootConfigBuilder().
    SetConfigCenter(config.NewConfigCenterConfigBuilder().
      SetProtocol("nacos").SetAddress("127.0.0.1:8848"). // 根據(jù)配置結(jié)構(gòu),設(shè)置配置中心
      SetDataID("dubbo-go-samples-configcenter-nacos-server"). // 設(shè)置配置ID
      SetGroup("dubbo").
      Build()).
  Build()

  if err := rootConfig.Init(); err != nil { // 框架啟動
    panic(err)
  }
  select {}
}

type listener struct {
	
}

func (l listener) Process(event *config_center.ConfigChangeEvent) {
  logger.Infof("listener get config = %s", event.Value)
}

當(dāng)然,以 API 的形式來啟動框架時,可以直接以API的形式來啟動框架。參考基本概念模塊的 Dubbogo 框架配置

4. Dubbogo 配置熱更新

// todo

正在開發(fā)中ing



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號