对分布式技术比较感兴趣,于是在闲暇时间写了一个简单的RPC框架娱乐一下,项目持续更新中......
如果感觉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<Integer>() {
@Override
public void success(Integer result) {
System.out.println("调用结果: " + result);
}
@Override
public void failure(Exception e) {
e.printStackTrace();
}
});
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。