对分布式技术比较感兴趣,于是在闲暇时间写了一个简单的RPC框架娱乐一下,项目持续更新中......
GitHub项目地址:
如果感觉Pudding对你有帮助可以顺手点个Star哦......哈哈
直接看一下示例代码吧
第一步: 启动注册中心
public class RegistryTest { public static void main(String[] args) { // 创建服务注册中心 ServiceRegistry registry = new DefaultServiceRegistry(); // 启动注册中心 registry.startRegistry(20000); }}
第二步: 启动服务提供者
public class ProviderTest { public static void main(String[] args) { // 创建服务提供者和服务包装器 ServiceProvider provider = new DefaultServiceProvider(); ServiceWrapper serviceWrapper = new DefaultServiceWrapper(); // 连接注册中心 provider.connectRegistry("127.0.0.1:20000"); // 创建服务 MyService myService = new MyServiceImpl(); // 包装服务为ServiceMeta Service service = serviceWrapper.build(myService, "127.0.0.1:30001"); // 启用服务 provider.startService(service); // 发布所有已启用的服务 provider.publishAllService(); }}
第三步: 启动服务消费者
同步调用
public class SyncConsumerTest { public static void main(String[] args) { // 创建服务消费者 ServiceConsumer serviceConsumer = new DefaultServiceConsumer(); // 连接注册中心 serviceConsumer.connectRegistry("127.0.0.1:20000"); // 订阅服务 serviceConsumer.subscribeService(MyService.class); // 创建同步服务代理 MyService myService = ProxyFactory.createSyncProxy(MyService.class); try { // 发起调用 int result = myService.add(100, 200); System.out.println("调用结果: " + result); } catch (InvokeTimeoutException e) { System.out.println("远程调用超时"); } catch (InvokeFailedException e) { System.out.println("远程调用失败"); } }}
异步调用
public class AsyncConsumerTest { public static void main(String[] args) { // 创建服务消费者 ServiceConsumer serviceConsumer = new DefaultServiceConsumer(); // 连接注册中心 serviceConsumer.connectRegistry("127.0.0.1:20000"); // 订阅服务 serviceConsumer.subscribeService(MyService.class); // 创建同步服务代理 MyService myService = ProxyFactory.createAsyncProxy(MyService.class); // 发起调用 myService.add(100, 200); // 监听调用结果 InvokeFuture.addInvokeFutureListener(new InvokeFutureListener () { @Override public void success(Integer result) { System.out.println("调用结果: " + result); } @Override public void failure(Exception e) { e.printStackTrace(); } }); }}