ApplicationModel 实例模型.
1.init 会通过 SPI 机制加载 ApplicationInitListener,调用其 init 方法.
2.initFrameworkExts 通过 SPI 机制加载 FrameworkExt 的扩展实现.
3.获取 ConsumerModel & ProviderModel.
4.Environment、ConfigManager、ServiceRepository.
我理解的 ApplicantModel 模型最重要的属性就是 Environment、ConfigManager、ServiceRepository 这三个. 分别代表环境(properties)、抽象配置(AbstractConfig)、ServiceRepository(服务仓库,包含提供者和消费者).
Lifecycle dubbo 组件的生命周期. initialize、start、destroy. 生命周期也就这三个方法了.
LifecycleAdapter 适配器. 空实现.
FrameworkExt 标记接口,框架扩展.
ServiceRepository 保存 providerModel、consumerModel 等数据.
// 我的理解是,一个服务可以被多个提供者提供,被多个消费者消费,服务关注的是基本属性,比如接口名,包含的方法,而 provider 更多的是关注
// 的是其自身的配置,比如超时时间等. 这么说,服务是基础,而提供者基于服务做各种限制.
// services
private ConcurrentMap<String, ServiceDescriptor> services = new ConcurrentHashMap<>();
// consumers
private ConcurrentMap<String, ConsumerModel> consumers = new ConcurrentHashMap<>();
// providers
private ConcurrentMap<String, ProviderModel> providers = new ConcurrentHashMap<>();
// useful to find a provider model quickly with serviceInterfaceName:version
private ConcurrentMap<String, ProviderModel> providersWithoutGroup = new ConcurrentHashMap<>();
所以 ServiceRepository 最核心的几个方法:
public ServiceDescriptor registerService(Class<?> interfaceClazz);
public void registerConsumer(String serviceKey,
ServiceDescriptor serviceDescriptor,
ReferenceConfigBase<?> rc,
Object proxy,
ServiceMetadata serviceMetadata);
public void registerProvider(String serviceKey,
Object serviceInstance,
ServiceDescriptor serviceModel,
ServiceConfigBase<?> serviceConfig,
ServiceMetadata serviceMetadata);
ServiceDescriptor 关注内容(serviceName、method):
private final String serviceName;
private final Class<?> serviceInterfaceClass;
// to accelerate search
private final Map<String, List<MethodDescriptor>> methods = new HashMap<>();
private final Map<String, Map<String, MethodDescriptor>> descToMethods = new HashMap<>();
ServiceMetadata 服务元数据,关注 defaultGroup、serviceType、target、attachments、attributeMap. 在语义上 ServiceMetadata 和 ServiceDescriptor 含义接近,都是描述服务的. 不同的是 ServiceDescriptor 更纯粹,而 ServiceMetadata 包含了一些额外的信息,例如 group、attachments 等属性.
ConsumerModel 关注内容(serviceDescriptor、referenceConfig、proxy):
// interfaceName + group + version
private String serviceKey;
private final ServiceDescriptor serviceModel;
private final ReferenceConfigBase<?> referenceConfig;
private final Set<String> apps = new TreeSet<>();
private Object proxyObject;
private Map<String, AsyncMethodInfo> methodConfigs = new HashMap<>();
ProviderModel 关注内容(serviceKey、serviceInstance、serviceDescriptor、serviceConfig、urls)
ProviderModel 和 ConsumerModel 的共同点在于都会持有 serviceKey、serviceDescriptor、AbstractConfig. 持有 AbstractConfig 的原因在于从中获取提供者或消费者的配置属性.
ConfigManager 持有 AbstractConfig 的配置信息. 实现 FrameworkExt 接口,说明其以后会被 SPI 机制加载. 主要处理的都是 AbstractConfig 类型的配置,例如 consumerConfig、providerConfig 等.
Environment 环境持有者,包含 propertiesConfiguration、systemConfiguration、environmentConfiguration、externalConfiguration、appExternalConfiguration. 详情参考配置中心.
AsyncMethodInfo 异步信息,主要是包含一些扩展点,比如在执行前返回等.
// callback instance when async-call is invoked
private Object oninvokeInstance;
// callback method when async-call is invoked
private Method oninvokeMethod;
// callback instance when async-call is returned
private Object onreturnInstance;
// callback method when async-call is returned
private Method onreturnMethod;
// callback instance when async-call has exception thrown
private Object onthrowInstance;
// callback method when async-call has exception thrown
private Method onthrowMethod;
有一个比较混乱的问题:serviceKey 的组成很混乱.
1.GroupServiceKeyCache.createServiceKey -> group/serviceName:serviceVersion:port
2.BaseServiceMetadata.buildServiceKey -> group/serviceName:serviceVersion
是否应该统一下?
分享到:
相关推荐
dubbox 修改了kryo序列问题 at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.returnFromResponse(DefaultFuture.java:190) ... at com.alibaba.dubbo.common.bytecode.proxy1.test(proxy1.java)
[INFO] dubbo-rpc-api ..................................... SUCCESS [3.413s] [INFO] dubbo-rpc-default ................................. SUCCESS [4.105s] [INFO] dubbo-rpc-injvm ............................
dubbo-common dubbo-config dubbo-container dubbo-demo dubbo-filter dubbo-maven dubbo-monitor dubbo-registry dubbo-remoting dubbo-rpc dubbo-simple dubbo-test 资源 需要使用maven
├── wetech-dubbo-app-common -- SSM框架公共模块 ├── wetech-dubbo-app-service -- 服务提供者应用 └── wetech-dubbo-app-web -- 消费者应用 模块介绍 wetech-dubbo-app-parent 是所有子模块的父工程,...
dubbo-rpc-memcached dubbo-rpc-redis dubbo-rpc-rest dubbo-rpc-rmi dubbo-rpc-thrift dubbo-rpc-webservice dubbo-simple dubbo-test dubbo-test-benchmark dubbo-test-benchmark-api dubbo-test-benchmark-client...
dubbo-monitor监控中心,基于alibaba dubbo.jar开发,解决Decode rpc invocation failed: expected map/object at java.lang.String (Ljava/lang/String)、com.alibaba.dubbo.common.URL' could not be instantiated...
数据库初始化脚本见工程中的testdb.sqldemo主要服务模块:common(公共基础模块)parent(maven的依赖配置,除common外的所有其他模块都寄存此parent)parent包含2个服务模块的基本组成2.1 parent-api:rpc服务api2.2 ...
一个RPC框架,使用Maven+Java+Protostuff,通过Java动态代理+Java反射实现。
分布式秒杀系统 项目介绍 基于Spring+SpringMVC+Hibernate+Dubbo分布式开发系统架构,提供高并发、分布式秒杀...| ├── jecp-dubbo-shop-order -- rpc商品订单服务提供者 | ├── jecp-dubbo-shop-product-api --
whatsmars-common mongodb,mail,AES,DES加解密 whatsmars-earth-web springmvc+velocity whatsmars-earth-su pport-web earth工程的辅助工程(task,mq,uuid,monitor..) whatmars-fs-web 用mongodb存储图片和文件 ...
whatsmars-common mongodb,mail,AES,DES加解密 whatsmars-earth-web springmvc+velocity whatsmars-earth-support-web earth工程的辅助工程(task,mq,uuid,monitor..) whatmars-fs-web 用mongodb存储图片和文件 ...
循序渐进写RPC1.Rpc-Api模块的构建首先我们分析一下Dubbo的原理,才可以进一步集成RPC。... RPC-API:公共接口RPC-Common:公共组件RPC-Core:核心组件RPC客户端:客户端RPC-Server:服务端Rpc-Api中组件
中引入了嵌入式序列化块列表dubbo-common/src/main/resources/security/serialize.blockedlist。 如果用户想添加允许列表,请参考dubbo.security.serialize.allowedClassList。 4. 序列号检查 可以启用一个可选的...
| ├── zheng-upms-rpc-api -- rpc接口包 | ├── zheng-upms-rpc-service -- rpc服务提供者 | └── zheng-upms-server -- 用户权限系统及SSO服务端[端口:1111] ├── zheng-cms -- 内容管理系统 | ├── ...
socket通信实现,登录系统,玩家线程模型,db系统,分布式id生成器,分布式锁,缓存系统,热更新机制,rpc系统,全服组队等等组织结构gameserver├── client -- 测试用netty客户端├── rpc-api -- 提供分布式的rpc基础├...
springcloud:支持Spring Cloud RPC框架raincat-spring-boot-starter:支持spring boot启动器raincat-sample:使用raincat框架的示例特征支持所有Spring版本并无缝集成提供对springcloud dubbo motan RPC框架的支持...
后端采用Spring Boot , Dubbo 微服务的架构,包括多个独立的微服务,micr-common公共服务,micr-web服务, micr-database数据库服务,micr-pay支付服务 ,micr-task定时任务。以服务为核心,微服务架构, Dubbo作为...
后端采用Spring Boot , Dubbo 微服务的架构,包括多个独立的微服务,micr-common公共服务,micr-web服务, micr-database数据库服务,micr-pay支付服务 ,micr-task定时任务。以服务为核心,微服务架构, Dubbo作为...
后端采用Spring Boot , Dubbo 微服务的架构,包括多个独立的微服务,micr-common公共服务,micr-web服务, micr-database数据库服务,micr-pay支付服务 ,micr-task定时任务。以服务为核心,微服务架构, Dubbo作为...
后端采用Spring Boot , Dubbo 微服务的架构,包括多个独立的微服务,micr-common公共服务,micr-web服务, micr-database数据库服务,micr-pay支付服务 ,micr-task定时任务。以服务为核心,微服务架构, Dubbo作为...