服务分组

使用服务分组区分服务接口的不同实现

特性说明

同一个接口针对不同的业务场景、不同的使用需求或者不同的功能模块等场景,可使用服务分组来区分不同的实现方式。同时,这些不同实现所提供的服务是可并存的,也支持互相调用。

使用场景

当一个接口有多种实现时,可以用 group 区分。

参考用例

https://github.com/apache/dubbo-samples/tree/master/dubbo-samples-group

使用方式

注解配置

服务提供端(注解配置)

使用 @DubboService 注解,添加 group 参数

  1. @DubboService(group = "demo")
  2. public class DemoServiceImpl implements DemoService {
  3. ...
  4. }
  5. @DubboService(group = "demo2")
  6. public class Demo2ServiceImpl implements DemoService {
  7. ...
  8. }

启动 Dubbo 服务,可在注册中心看到相同服务名不同分组的服务,以 Nacos 作为注册中心为例,显示如下内容:

image-service-group-1.png

服务消费端(注解配置)

使用 @DubboReference 注解,添加 group 参数

  1. @DubboReference(group = "demo")
  2. private DemoService demoService;
  3. @DubboReference(group = "demo2")
  4. private DemoService demoService2;
  5. //group值为*,标识匹配任意服务分组
  6. @DubboReference(group = "*")
  7. private DemoService demoService2;

同样启动 Dubbo 服务后,可在注册中心看到相同服务名不同分组的引用者,以 Nacos 作为注册中心为例,显示如下内容: image-service-group-2.png

xml配置

服务提供端( xml 配置)

使用 <dubbo:service /> 标签,添加 group 参数

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  7. http://dubbo.apache.org/schema/dubbo
  8. http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
  9. ...
  10. <dubbo:service interface="org.apache.dubbo.example.service.DemoService" group="demo"/>
  11. <dubbo:service interface="org.apache.dubbo.example.service.DemoService" group="demo2"/>
  12. ...
  13. </beans>

启动 Dubbo 服务,可在注册中心看到相同服务名不同分组的服务,以 Nacos 作为注册中心为例,显示如下内容:

image-service-group-1.png

服务消费端( xml 配置)

使用 dubbo:reference/ 注解,添加 group 参数

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  7. http://dubbo.apache.org/schema/dubbo
  8. http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
  9. ...
  10. <!-- 引用服务接口 -->
  11. <dubbo:reference id="demoService" interface="org.apache.dubbo.example.service.DemoService" group="demo"/>
  12. <dubbo:reference id="demoService2" interface="org.apache.dubbo.example.service.DemoService" group="demo2"/>
  13. <!-- group值为*,标识匹配任意服务分组 -->
  14. <dubbo:reference id="demoService3" interface="org.apache.dubbo.example.service.DemoService" group="*"/>
  15. ...
  16. </beans>

同样启动 Dubbo 服务后,可在注册中心看到相同服务名不同分组的引用者,以 Nacos 作为注册中心为例,显示如下内容:

image-service-group-2.png

API配置

服务提供端( API 配置)

使用 org.apache.dubbo.config.ServiceConfig 类,添加 group 参数

  1. // ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口
  2. // 请自行缓存,否则可能造成内存和连接泄漏
  3. ServiceConfig<DemoService> service = new ServiceConfig<>();
  4. service.setInterface(DemoService.class);
  5. service.setGroup("demo");
  6. ...
  7. ServiceConfig<DemoService> service2 = new ServiceConfig<>();
  8. service.setInterface(DemoService.class);
  9. service.setGroup("demo2");
  10. ...

启动 Dubbo 服务,可在注册中心看到相同服务名不同分组的服务,以 Nacos 作为注册中心为例,显示如下内容:

image-service-group-1.png

服务消费端( API 配置)

使用 org.apache.dubbo.config.ReferenceConfig,添加 group 参数

  1. // ReferenceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口
  2. // 请自行缓存,否则可能造成内存和连接泄漏
  3. ReferenceConfig<DemoService> reference = new ReferenceConfig<>();
  4. reference.setInterface(DemoService.class);
  5. reference.setGroup("demo");
  6. ...
  7. ReferenceConfig<DemoService> reference2 = new ReferenceConfig<>();
  8. reference2.setInterface(DemoService.class);
  9. reference2.setGroup("demo2");
  10. ...
  11. ReferenceConfig<DemoService> reference3 = new ReferenceConfig<>();
  12. reference3.setInterface(DemoService.class);
  13. reference3.setGroup("*");
  14. ...

同样启动 Dubbo 服务后,可在注册中心看到相同服务名不同分组的引用者,以 Nacos 作为注册中心为例,显示如下内容: image-service-group-2.png

总是 只调 一个可用组的实现

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