对分布式技术比较感兴趣,于是在闲暇时间写了一个简单的RPC框架娱乐一下,项目持续更新中......
GitHub项目地址: Pudding
如果感觉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();// 包装服务为ServiceMetaService 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<Integer>() {@Overridepublic void success(Integer result) {System.out.println("调用结果: " + result);}@Overridepublic void failure(Exception e) {e.printStackTrace();}});}
}