Dubbo-go 配置项
1. 配置结构
1.1 框架配置结构
- 根配置
- ProviderConfig
- ConsumerConfig
1.2 配置例子
dubbo: application: # 应用配置 name: dubbo-go module: local version: 1.0.0 owner: zhaoyunxing organization: dubbo-go metadata-type: local # 元数据上报方式,默认为本地 metadata-report: # 元数据上报配置, 不包含此字段则不开启元数据上报,应用级服务发现依赖此字段,参考例子:https://github.com/apache/dubbo-go-samples/tree/master/registry/servicediscovery protocol: nacos # 元数据上报方式,支持nacos/zookeeper address: 127.0.0.1:8848 username: "" password: "" timeout: "3s" group: "dubbo" protocols: tripleProtocol: # triple协议定义,参考例子https://github.com/apache/dubbo-go-samples/tree/master/rpc/tri name: tri # 网络协议,支持tri/dubbo/jsonrpc/grpc port: 20001 dubboProtocol: # dubbo协议定义,参考例子https://github.com/apache/dubbo-go-samples/tree/master/rpc/dubbo name: dubbo port: 20000 params: # dubbo 传输层配置,此字段不配置则使用协议默认值 reconnect-interval: 0 connection-number: 1 heartbeat-period: 5s session-timeout: 180s pool-size: 64 pool-ttl: 600 getty-session-param: compress-encoding: false tcp-no-delay: true tcp-keep-alive: true keep-alive-period: 120s tcp-r-buf-size: 262144 tcp-w-buf-size: 65536 pkg-rq-size: 1024 pkg-wq-size: 512 tcp-read-timeout: 1s tcp-write-timeout: 5s wait-timeout: 1s max-msg-len: 1024000 session-name: client config-center: # 配置中心,参考例子:https://github.com/apache/dubbo-go-samples/tree/master/configcenter protocol: nacos # 支持 nacos/zookeeper/apollo address: 127.0.0.1:8848 group: dubbo namespace: dubbo timeout: 10s params: username: nacos password: 123456 registries: # 注册中心配置,参考例子 https://github.com/apache/dubbo-go-samples/tree/master/metrics zk: protocol: zookeeper timeout: 3s address: 127.0.0.1:2181 nacos: timeout: 5s address: 127.0.0.1:8848 etcd: address: 127.0.0.1:2379 consumer: # 客户端配置 request_timeout: 3s filter: myClientFilter # 客户端 filters name,多个则逗号隔开 registry-ids: zk # 使用上面定义的注册中心id max-wait-time-for-service-discovery: 3s # 服务发现最长等待时间 references: GreeterImpl: protocol: dubboProtocol serialization: hessian2 # 序列化方式 interface: com.apache.dubbo.sample.basic.IGreeter # 接口名,需要与服务端一致 provider: # 服务端配置 registry-ids: zk # 使用上面定义的注册中心id services: DubboGreeterImpl: filter: myServerFilter, myServerFilter2 # server filters name protocol-ids: dubboProtocol # 使用上面定义的协议id serialization: hessian2 # hessian 序列化方式 interface: com.apache.dubbo.sample.basic.IGreeter # 接口名,需要与客户端一致 TripleGreeterImpl: protocol-ids: tripleProtocol # 使用上面定义的协议id serialization: protobuf # pb 序列化方式 interface: com.apache.dubbo.sample.basic.TripleService # 接口名,需要与客户端一致 logger: # 日志配置,参考例子:https://github.com/apache/dubbo-go-samples/tree/master/logger zap-config: level: info # 日志级别 lumberjack-config: filename: logs.log # 文件输出目录 maxSize: 1 maxAge: 3 maxBackups: 5 localTime: true compress: false metrics: # 数据上报配置,参考例子:https://github.com/apache/dubbo-go-samples/tree/master/metrics enable: true # 数据上报开关,默认开启 path: /custom-metrics-path # 拉模式数据上报本地监听path 默认/metrics port: 9091 # 拉模式数据上报本地监听端口,默认9090
2. 框架读取配置方式
2.1 从文件读取
- 需要按照上述配置结构,定义 dubbogo.yml 文件,并在应用启动之前设置环境变量 DUBBO_GO_CONFIG_PATH为 dubbogo.yml 的位置。
- 在代码中,调用 config.Load 方法,启动框架。一个例子如下:
// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yml func main() { // set consumer struct if needed config.SetConsumerService(grpcGreeterImpl) // config loader start if err := config.Load(); err != nil { panic(err) } logger.Info("start to test dubbo") req := &api.HelloRequest{ Name: "laurence", } // do RPC invocation reply, err := grpcGreeterImpl.SayHello(context.Background(), req) if err != nil { logger.Error(err) } logger.Infof("client response result: %v\n", reply) }
2.2 配置 API
用户无需使用配置文件,可直接在代码中以 API 的调用的形式写入配置,如前面"快速开始"部分所提供的例子:
func main() { // init rootConfig with config api rc := config.NewRootConfigBuilder(). SetConsumer(config.NewConsumerConfigBuilder(). SetRegistryIDs("zookeeper"). AddReference("GreeterClientImpl", config.NewReferenceConfigBuilder(). SetInterface("org.apache.dubbo.UserProvider"). SetProtocol("tri"). Build()). Build()). AddRegistry("zookeeper", config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")). Build() // validate consumer greeterProvider if err := rc.Init(); err != nil{ panic(err) } // run rpc invocation testSayHello() }
配置 API 看上去写法较为复杂,但单个配置结构的构造过程都是一致的,参考 Java Builder 的设计,我们在配置 API 模块选用 New().SetA().SetB().Build()的方式来构造单个配置结构。
将上述例子中的 rootConfig 构造过程,可以拆解为:
referenceConfig := config.NewReferenceConfigBuilder(). SetInterface("org.apache.dubbo.UserProvider"). SetProtocol("tri"). Build() consumerConfig := config.NewConsumerConfigBuilder(). SetRegistryIDs("zookeeper"). AddReference("GreeterClientImpl", referenceConfig). Build()). registryConfig := config.NewRegistryConfigWithProtocolDefaultPort("zookeeper") rc := config.NewRootConfigBuilder(). SetConsumer(consumerConfig). AddRegistry("zookeeper", registryConfig). Build()
2.3 从配置中心读取
Dubbo-go 服务框架支持将配置文件 ‘dubbogo.yml’ 的内容预先放入配置中心,再通过配置注册中心的地址。在本地 dubbogo.yml 配置文件内只需写入配置中心的信息即可,目前支持作为配置中心的中间件有:apollo、nacos、zookeeper
可参考配置中心Samples,凡是正确配置了config-center 配置的服务,都会优先从配置中心加载整个配置文件。
dubbo: config-center: protocol: apollo address: localhost:8080 app-id: demo_server cluster: default namespace: demo-provider-config # 框架从 apollo 配置中最更新对应位置加载配置文件,并根据该配置文件启动