首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >dubbo源码学习笔记----Provider和Consumer

dubbo源码学习笔记----Provider和Consumer

作者头像
春哥大魔王
发布2018-04-16 11:44:18
发布2018-04-16 11:44:18
5920
举报

provider

代码语言:javascript
复制
    <!-- 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

代码语言:javascript
复制
    <!-- 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持有所有服务提供者的方法信息

代码语言:javascript
复制
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持有所有服务提供者信息

代码语言:javascript
复制
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持有服务的提供者和消费者信息

代码语言:javascript
复制
    /**
     * 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注解

代码语言:javascript
复制
public @interface Service {

    Class<?> interfaceClass() default void.class;    String interfaceName() default "";    String version() default "";    String group() default "";    String path() default "";

service信息通过ServiceConfig对配置信息进行注入

代码语言:javascript
复制
    public ServiceConfig(Service service) {
        appendAnnotation(Service.class, service);
    }

可以发现使用annotation方式标注server,通过反射对server进行解析,放到对应对model中。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 春哥talk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • provider
  • consumer
  • ProviderMethodModel持有所有服务提供者的方法信息
  • ProviderModel持有所有服务提供者信息
  • ApplicationModel持有服务的提供者和消费者信息
  • service注解
  • service信息通过ServiceConfig对配置信息进行注入
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档