Dubbo-go的配置
Dubbo-go的配置
此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档,请参阅最新版本。
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 配置中最更新对应位置加载配置文件,并根据该配置文件启动
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
最后修改 January 2, 2023: Enhance Dubbogo docs (#1800) (71c8e72274)