W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
dubbogo 3.0 動態(tài)配置
配置中心即為在分布式場景下,無法將最新的框架配置文件和應(yīng)用程序綁定在一起,可以指定好配置中心的信息,例如配置中心類型和地址,并在框架啟動時從配置中心拉取相應(yīng)配置進行啟動。
參考倉庫: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
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 框架配置
// todo
正在開發(fā)中ing
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: