您的位置:首页 > 其它

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

2018-01-13 00:00 344 查看
摘要: ApplicationModel

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