`
阅读更多


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

是否应该统一下?




0
1
分享到:
评论

相关推荐

    dubbo-2.8.4.jar

    dubbox 修改了kryo序列问题 at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.returnFromResponse(DefaultFuture.java:190) ... at com.alibaba.dubbo.common.bytecode.proxy1.test(proxy1.java)

    Dubbo 2.5.3 jar包

    [INFO] dubbo-rpc-api ..................................... SUCCESS [3.413s] [INFO] dubbo-rpc-default ................................. SUCCESS [4.105s] [INFO] dubbo-rpc-injvm ............................

    dubbo-monitor-simple.zip

    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...

    dubbo-master.zip包,解压可用

    - `dubbo-rpc`:RPC(远程过程调用)核心模块,提供服务调用的接口和实现。 - `dubbo-proxy`:代理模块,为服务提供动态代理功能。 - `dubbo-cluster`:集群模块,处理服务的集群策略,如负载均衡、故障转移等。 ...

    alibaba_dubbox_2.8.4.zip[jar、pom]

    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-3.1.4源码包

    1. `dubbo-common`:包含了dubbo的核心通用模块,如配置管理、日志处理、序列化等。 2. `dubbo-remoting`:处理服务间通信的模块,实现了客户端和服务端的连接和消息传输。 3. `dubbo-rpc`:实现了RPC协议,处理服务...

    dubbo-master.zip

    - `dubbo-rpc`:处理RPC调用的细节,如接口代理、调用链跟踪等。 - `dubbo-cluster`:集群层,负责服务的负载均衡、容错、路由策略。 - `dubbo-registry`:服务注册与发现,支持多种注册中心(如Zookeeper、...

    dubbo-master

    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

    dubbox 2.8.4

    4. **dubbo-rpc-api-2.8.4.jar**:RPC(Remote Procedure Call)接口,定义了远程方法调用的规范,实现了服务提供者与消费者之间的调用逻辑,支持多种RPC框架,如Hessian、Protobuf等。 5. **dubbo-cluster-2.8.4....

    dubbo-2.5.x 监控中心代码

    4. **ApplicationModel**:应用模型,包含了应用相关的所有信息,如服务、消费者、提供者等,主要类是`com.alibaba.dubbo.common.extension.ExtensionLoader`和`com.alibaba.dubbo.config.ApplicationConfig`。 四...

    dubbo-demo.zip

    Dubbo是阿里巴巴开源的高性能Java RPC框架,它允许开发者构建微服务架构,实现服务的高可用、高性能和可扩展性。 【描述】"dubbo-demo.zip" 提供了一个完整的开发环境,帮助初学者理解Dubbo的核心概念,如服务提供...

    wetech-dubbo-app:SSM整合dubbo示例工程

    ├── wetech-dubbo-app-common -- SSM框架公共模块 ├── wetech-dubbo-app-service -- 服务提供者应用 └── wetech-dubbo-app-web -- 消费者应用 模块介绍 wetech-dubbo-app-parent 是所有子模块的父工程,...

    dubbo+zookeeper的Demo工程

    Dubbo,由阿里巴巴开源,是一款高性能、轻量级的Java RPC框架,它提供了服务治理的全套解决方案,包括服务注册、服务发现、负载均衡、容错处理等。而Zookeeper,则是一个分布式的、开放源码的分布式应用程序协调服务...

    springboot-dubbo-demo:springboot dubbo zipkin整合 微服务

    数据库初始化脚本见工程中的testdb.sqldemo主要服务模块:common(公共基础模块)parent(maven的依赖配置,除common外的所有其他模块都寄存此parent)parent包含2个服务模块的基本组成2.1 parent-api:rpc服务api2.2 ...

    springboot整合Dubbo框架,实现RPC服务远程调用

    核心角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方(负载均衡) ...Monitor 服务消费者和提供者在...dubbo-common:公共代码块,Dubbo接口,实体类 3、核心配置 提供方配置 server: tomc

    dubbo-shell

    Dubbo是一个高性能、轻量级的开源Java RPC框架,它致力于提供一种简单、高效的分布式服务调用解决方案。在Dubbo中,服务提供者(Provider)暴露服务,服务消费者(Consumer)调用这些服务,而Dubbo作为中间层负责...

    本地搭建Dubbo-服务的示例Demo

    - **Spring容器配置**:为了整合Dubbo和Spring,需要配置两个XML文件:`applicationContext_common.xml`和`applicationContext_dubbo_client.xml`。前者主要用于Spring的基本配置,后者则侧重于Dubbo客户端的配置。 ...

    dubbo源码解读与实战.doc

    - **dubbo-rpc**:实现了一套完整的RPC框架,包括服务的发布、订阅、调用等功能。它是Dubbo的核心组成部分之一。 - **dubbo-registry**:提供了服务发现的能力,支持多种注册中心的实现,如Zookeeper、Nacos等。 - *...

    dubbo-parent-2.6.4:dubbo原始码学习

    1. dubbo-common:基础通用组件,包含各种工具类和公共模型。 2. dubbo-remoting:远程通信模块,实现了多种通信协议如Netty、Grpc等。 3. dubbo-rpc:RPC核心模块,负责服务调用的实现。 4. dubbo-proxy:代理模块...

    Dubbo 项目结构解析1

    1. **dubbo-common**:这是Dubbo的核心通用模块,包含了一些基础工具类和公共接口,如URL类,它是Dubbo中最重要的类之一,用于表示服务地址和服务参数。 2. **dubbo-remoting**:远程通信模块,负责提供网络通信...

Global site tag (gtag.js) - Google Analytics