Dubbo源码-00-源码环境
开篇明确阅读源码需要解决的疑问,带着问题驱动源码的阅读
版本
为了尽可能减少源码阅读代价,选用2.6.x版本
源码地址
Apache源码或者我Fork的分支study-2.6.x带注释
架构图
Demo
.
├── dubbo-demo
│ ├── dubbo-demo-api // 接口
│ ├── dubbo-demo-consumer // 消费者
│ ├── dubbo-demo-provider // 提供者
└── tree.txt
以native方式
1 生产者
public class ApiProvider {
public static void main(String[] args) throws IOException {
// 服务提供者暴露服务配置 封装了与注册中心的连接
ServiceConfig<DemoService> service = new ServiceConfig<DemoService>();
service.setApplication(new ApplicationConfig("native-provider")); // 应用配置
service.setRegistry(new RegistryConfig("zookeeper://localhost:2181")); // 注册中心
service.setProtocol(new ProtocolConfig("dubbo", 20880)); // 协议
service.setInterface(DemoService.class);
service.setRef(new DemoServiceImpl()); // 提供的服务实现
// 暴露及注册服务
service.export();
System.in.read();
}
}
2 消费者
public class ApiConsumer {
public static void main(String[] args) {
// 引用远程服务 此实例很重 封装了与注册中心的连接以及与提供者的连接
ReferenceConfig<DemoService> reference = new ReferenceConfig<DemoService>();
reference.setApplication(new ApplicationConfig("native-consumer")); // 配置应用信息
reference.setRegistry(new RegistryConfig("zookeeper://localhost:2181")); // 配置注册中心信息
reference.setInterface(DemoService.class); // 引用的远程服务的接口抽象
// 和本地bean一样使用service 此代理对象内部封装了所有通讯细节 服务端获得了远程服务的代理对象 像调用本地方法一样
DemoService demoService = reference.get();
String ret = demoService.sayHello("world");
System.out.println("ret=" + ret);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律