使用方法
@Componentpublic class HelloClient {@Reference // dubbo 注解private HelloService helloService;public String hello() {return helloService.hello("World");}}@Service // dubbo 注解@Componentpublic class HelloServiceImpl implements HelloService {@Overridepublic String hello(String name) {return "Hello " + name;}}
核心原理

实现接口
对外服务:
/*** RPC 框架对外提供的服务接口*/public interface RpcAccessPoint extends Closeable{/*** 客户端获取远程服务的引用* @param uri 远程服务地址* @param serviceClass 服务的接口类的 Class* @param <T> 服务接口的类型* @return 远程服务引用*/<T> T getRemoteService(URI uri, Class<T> serviceClass);/*** 服务端注册服务的实现实例* @param service 实现实例* @param serviceClass 服务的接口类的 Class* @param <T> 服务接口的类型* @return 服务地址*/<T> URI addServiceProvider(T service, Class<T> serviceClass);/*** 服务端启动 RPC 框架,监听接口,开始提供远程服务。* @return 服务实例,用于程序停止的时候安全关闭服务。*/Closeable startServer() throws Exception;}
注册中心:
/*** 注册中心*/public interface NameService {/*** 注册服务* @param serviceName 服务名称* @param uri 服务地址*/void registerService(String serviceName, URI uri) throws IOException;/*** 查询服务地址* @param serviceName 服务名称* @return 服务地址*/URI lookupService(String serviceName) throws IOException;}
用户使用
服务接口:
public interface HelloService {String hello(String name);}
真正调用:
URI uri = nameService.lookupService(serviceName);HelloService helloService = rpcAccessPoint.getRemoteService(uri, HelloService.class);String response = helloService.hello(name);logger.info(" 收到响应: {}.", response);
服务实现:
public class HelloServiceImpl implements HelloService {@Overridepublic String hello(String name) {String ret = "Hello, " + name;return ret;}}
服务流程:
rpcAccessPoint.startServer();URI uri = rpcAccessPoint.addServiceProvider(helloService, HelloService.class);nameService.registerService(serviceName, uri);
目录结构:
