dubbo源码学习笔记----Provider和Consumer
2018-01-13 00:00
344 查看
摘要: ApplicationModel
可以发现使用annotation方式标注server,通过反射对server进行解析,放到对应对model中。
provider
<!-- provider's application name, used for tracing dependency relationship --> <dubbo:application name="demo-provider"/> <!-- use multicast registry center to export service --> <dubbo:registry address="multicast://224.5.6.7:1234"/> <!-- use dubbo protocol to export service on port 20880 --> <dubbo:protocol name="dubbo" port="20880"/> <!-- service implementation, as same as regular local bean --> <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/> <!-- declare the service interface to be exported --> <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/>
consumer
<!-- consumer's application name, used for tracing dependency relationship (not a matching criterion), don't set it same as provider --> <dubbo:application name="demo-consumer"/> <!-- use multicast registry center to discover service --> <dubbo:registry address="multicast://224.5.6.7:1234"/> <!-- generate proxy for the remote service, then demoService can be used in the same way as the local regular interface --> <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService"/>
ProviderMethodModel持有所有服务提供者的方法信息
public class ProviderMethodModel { private transient final Method method; private final String methodName; private final String[] methodArgTypes; private final String serviceName; public ProviderMethodModel(Method method, String serviceName) { this.method = method; this.serviceName = serviceName; this.methodName = method.getName(); this.methodArgTypes = getArgTypes(method); }
ProviderModel持有所有服务提供者信息
public class ProviderModel { private final String serviceName; private final Object serviceInstance; private final ServiceConfig metadata; private final Map<String, List<ProviderMethodModel>> methods = new HashMap<String, List<ProviderMethodModel>>(); public ProviderModel(String serviceName, ServiceConfig metadata, Object serviceInstance) { if (null == serviceInstance) { throw new IllegalArgumentException("Service[" + serviceName + "]Target is NULL."); } this.serviceName = serviceName; this.metadata = metadata; this.serviceInstance = serviceInstance; initMethod(); }
ApplicationModel持有服务的提供者和消费者信息
/** * full qualified class name -> provided service */ private static final ConcurrentMap<String, ProviderModel> providedServices = new ConcurrentHashMap<String, ProviderModel>(); /** * full qualified class name -> subscribe service */ private static final ConcurrentMap<String, ConsumerModel> consumedServices = new ConcurrentHashMap<String, ConsumerModel>();
service注解
public @interface Service { Class<?> interfaceClass() default void.class; String interfaceName() default ""; String version() default ""; String group() default ""; String path() default "";
service信息通过ServiceConfig对配置信息进行注入
public ServiceConfig(Service service) { appendAnnotation(Service.class, service); }
可以发现使用annotation方式标注server,通过反射对server进行解析,放到对应对model中。
相关文章推荐
- dubbo学习笔记 一 源码编译
- dubbo 源码学习笔记 (六) —— 集群模块
- dubbo源码 学习笔记(四)
- dubbo 学习笔记 -- provider端
- dubbo 学习笔记 -- consumer端
- dubbo 学习笔记 -- consumer端
- dubbo 学习笔记 -- provider端
- dubbo 源码学习笔记 (二) —— dubbo发布服务的过程
- dubbo 源码学习笔记 (八) —— 远程通讯模块
- dubbo源码 学习笔记(六)
- Dubbo 源码学习笔记 —— SPI的机制体现
- Dubbo学习笔记:No provider available for the service ...异常问题的解决
- dubbo源码 学习笔记(五)
- dubbo源码学习笔记----RPC
- dubbo 学习笔记 -- consumer端
- dubbo源码学习笔记----结合Spring
- dubbo 源码学习笔记 (一) —— ExtensionLoader和URL
- dubbo源码 学习笔记(二)
- dubbo 源码学习笔记 (三) —— dubbo引用服务的过程
- dubbo 源码学习笔记 (五) —— 注册中心模块