在 Dubbo 中为同一个服务配置多个版本 当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
. ├── README.md ├── README_zh.md ├── docker ├── go-api ├── go-client ├── go-server-v1 └── go-server-v2
通过更改提供者和消费者版本号来消费指定的服务
老版本服务提供者配置:
# service config services: "UserProvider": registry: "demoZk" protocol : "dubbo" interface : "org.apache.dubbo.UserProvider" loadbalance: "random" warmup: "100" cluster: "failover" version: "1.0" methods: - name: "GetUser" retries: 1 loadbalance: "random"
新版本服务提供者配置:
# service config services: "UserProvider": registry: "demoZk" protocol : "dubbo" interface : "org.apache.dubbo.UserProvider" loadbalance: "random" warmup: "100" cluster: "failover" version: "2.0" methods: - name: "GetUser" retries: 1 loadbalance: "random"
老版本服务消费者配置:
references: "UserProvider": registry: "demoZk" protocol: "dubbo" interface: "org.apache.dubbo.UserProvider" cluster: "failover" version: "1.0" methods: - name: "GetUser" retries: 3
新版本服务消费者配置:
references: "UserProvider": registry: "demoZk" protocol: "dubbo" interface: "org.apache.dubbo.UserProvider" cluster: "failover" version: "2.0" methods: - name: "GetUser" retries: 3
消费者日志
response result: {A001 Alex Stocks 18 2021-05-09 18:30:16.957 +0800 CST Provider Version 2.0}
提供者日志
Server V2 req:[]interface {}{"A001"}[2021-05-09/18:30:16 github.com/apache/dubbo-go-samples/version/go-server-v2/pkg.(*UserProvider).GetUser: user.go: 47] %s Server V2 rsp:pkg.User{ID:"A001", Name:"Alex Stocks", Age:18, Time:time.Time{wall:0xc01e0c4e39144248, ext:20634030436, loc:(*time.Location)(0x4b80960)}, ServiceInfo:"Provider Version 2.0"}
请参阅根目录中的 HOWTO.md 来运行本例。