RPC-BDY(2)
早起的鸟儿不该是牢笼的困兽
-2022.7.14
前言
在上一节最简单实现里,只能注册一个服务,现在把服务和注册两个分开实现,保证能提供多个服务
一、服务注册表
1.服务注册表接口
通过注册服务和获取服务的功能
/**
* 服务注册接口
*/
public interface ServiceRegistry {
//注册方法
public <T> void registry(T service);
//获取方法
public Object getService(String serviceName);
}
2.服务注册表实现类
/**
* 服务注册实现类
*/
public class DefaultServiceRegistry implements ServiceRegistry{
private static final Logger logger = LoggerFactory.getLogger(DefaultServiceRegistry.class);
//ConcurrentHashMap线程安全
final Map<String, Object> serviceMap = new ConcurrentHashMap<>();
final Set<String> serviceSet = ConcurrentHashMap.newKeySet();
@Override
public <T> void registry(T service) {
//将方法名添加到set中
String serviceName = service.getClass().getCanonicalName();
if(serviceSet.contains(serviceName)) return;
serviceSet.add(serviceName);
//获取类实现的接口
Class<?>[] interfaces = service.getClass().getInterfaces();
if (interfaces.length==0) {
throw new RpcException(RpcError