分组
在一个接口出现多个实现类时,注册到注册中心时可以用分组进行区分,比如获取用户信息,可以从缓存或者从数据库中获取,这样定义的接口中获取用户方法就会有两个实现类,如下demo,
接口GroupService
/**
* 测试分组
* @Author: Ship
* @CreateDate: 2019-07-21
*/
public interface GroupService {
/**
* 获取位置信息
* @return
*/
public String printLocation();
}
在消费端存在两种实现:
@Service
@com.alibaba.dubbo.config.annotation.Service(version = "1.0.0",group = "groupOne")
public class GroupOneServiceImpl implements GroupService {
@Override
public String printLocation() {
return "GroupOneServiceImpl->printLocation";
}
}
@Service
@com.alibaba.dubbo.config.annotation.Service(version = "1.0.0",group = "groupTwo")
public class GroupTwoServiceImpl implements GroupService {
@Override
public String printLocation() {
return "GroupTwoServiceImpl->printLocation";
}
}
注册的时候需要添加group属性,两个实现类不同,标识为不同的分组
消费端调用时添加group属性标识为哪一个分组下的接口。
@RestController
public class GroupController {
@Reference(version = "1.0.0",group = "groupTwo")
private GroupService groupService;
@GetMapping("/getLocation")
public Object getLocation(){
return groupService.printLocation();
}
}
分组聚合
一个接口存在多个实现类时,通过分组,只调用一个远程服务,如果需要调用多个,设置group的值为*,merger为true。
demo如下:
接口
public interface GroupService {
List<Group> getLstGroup();
}
A实现类
public class GroupAServiceImpl implements GroupService {
@Override
public List<Group> getLstGroup() {
System.out.println("GroupAServiceImpl->getLstGroup");
List<Group> lst=new ArrayList<>();
Group group01=new Group();
group01.setId(1);
group01.setName("name01");
lst.add(group01);
return lst;
}
}
B实现类
public class GroupBServiceImpl implements GroupService {
@Override
public List<Group> getLstGroup() {
System.out.println("GroupBServiceImpl->getLstGroup");
List<Group> lst=new ArrayList<>();
Group group01=new Group();
group01.setId(2);
group01.setName("name02");
lst.add(group01);
return lst;
}
}
服务xml配置
<dubbo:service interface="com.quickstart.service.GroupService" ref="groupAService" group="A"/>
<bean id="groupAService" class="com.test.dubbo.provider.service.impl.GroupAServiceImpl"/>
<dubbo:service interface="com.quickstart.service.GroupService" ref="groupBService" group="B"/>
<bean id="groupBService" class="com.test.dubbo.provider.service.impl.GroupBServiceImpl"/>
服务引用
<dubbo:reference id="groupService" interface="com.quickstart.service.GroupService" group="*" merger="true"/>