使用配置 API 启动应用

1. 准备工作

  • dubbo-go cli 工具和依赖工具已安装
  • 创建一个新的 demo 应用

2. 使用配置 API 启动应用

用户无需使用配置文件,可直接在代码中以 API 的调用的形式写入配置

2.1 修改服务端代码:

  1. func main() {
  2. config.SetProviderService(&GreeterProvider{})
  3. protocolConfig := config.NewProtocolConfigBuilder().
  4. SetPort("20000").
  5. SetName("tri").
  6. Build()
  7. serviceConfig := config.NewServiceConfigBuilder().
  8. SetInterface(""). // read interface from pb
  9. Build()
  10. providerConfig := config.NewProviderConfigBuilder().
  11. AddService("GreeterProvider", serviceConfig).
  12. Build()
  13. rootConfig := config.NewRootConfigBuilder().
  14. AddProtocol("triple-protocol-id", protocolConfig). // add protocol, key is custom
  15. SetProvider(providerConfig).Build()
  16. if err := config.Load(config.WithRootConfig(rootConfig)); err != nil {
  17. panic(err)
  18. }
  19. select {}
  20. }

配置 API 看上去写法较为复杂,但单个配置结构的构造过程都是一致的,参考 Java Builder 的设计,我们在配置 API 模块选用 New().SetA().SetB().Build()的方式来逐层构造单个配置结构。

完成后,可删除掉go-server/conf 文件夹。

2.2 修改客户端代码:

go-client/cmd/client.go

  1. func main() {
  2. config.SetConsumerService(grpcGreeterImpl)
  3. referenceConfig := config.NewReferenceConfigBuilder().
  4. SetProtocol("tri").
  5. SetURL("tri://localhost:20000").
  6. SetInterface(""). // read interface name from pb
  7. Build()
  8. consumerConfig := config.NewConsumerConfigBuilder().
  9. AddReference("GreeterClientImpl", referenceConfig).
  10. Build()
  11. rootConfig := config.NewRootConfigBuilder().
  12. SetConsumer(consumerConfig).Build()
  13. if err := config.Load(config.WithRootConfig(rootConfig)); err != nil {
  14. panic(err)
  15. }
  16. logger.Info("start to test dubbo")
  17. req := &api.HelloRequest{
  18. Name: "laurence",
  19. }
  20. reply, err := grpcGreeterImpl.SayHello(context.Background(), req)
  21. if err != nil {
  22. logger.Error(err)
  23. }
  24. logger.Infof("client response result: %v\n", reply)
  25. }

完成后,可删除掉go-client/conf 文件夹。

2.3 验证 Config API

分别启动 server 和 client ,查看调用信息。

  1. INFO cmd/client.go:62 client response result: name:"Hello laurence" id:"12345" age:21

最后修改 December 16, 2022: Fix check (#1736) (97972c1)