dubbo服务发布过程

1. dubbo的服务发布过程

1.暴露本地服务 -- 是指在同一个jvm中不用通过zk来远程通信例如在一个服务里自己调用自己的接口

      Export dubbo service com.alibaba.dubbo.demo.DemoService to local registry, dubbo version: 2.0.0, current host: 192.168.20.102。

  1.1  dubbo生产者提供服务入口 --  <dubbo:service  interface="...">

标签自定义<dubbo:service>是通过和spring 结合类DubboNamespaceHandler进行类处理工作。

 
  1. public class DubboNamespaceHandler extends NamespaceHandlerSupport {

  2. static {

  3. Version.checkDuplicate(DubboNamespaceHandler.class);

  4. }

  5. public void init() {

  6. registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));

  7. registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true));

  8. registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true));

  9. registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));

  10. registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));

  11. registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));

  12. registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));

  13. registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));

  14. registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));

  15. registerBeanDefinitionParser("annotation", new AnnotationBeanDefinitionParser());

  16. }

  17. }

 通过ServiceBean是主要处理服务。

1.2  获取zk的服务注册地址

<dubbo:registry address="zookeeper://106.14.123.227:2181" id="com.alibaba.dubbo.config.RegistryConfig" />

以及注册信息

{"path":"com.alibaba.dubbo.registry.RegistryService",              "protocol":"dubbo","application":"demo-provider","qos.port":"22222","dubbo":"2.0.0","pid":"1172","timestamp":"1536507787716"}

拼接成多个(集群zk)dubbo访问请求的zookeeper路由地址,zookeeper://106.14.123.227:2181/com.alibaba.dubbo.registry.RegistryService?application=demo-provider&dubbo=2.0.0&pid=1172&qos.port=22222&timestamp=1536507787716

1.3  为每一种不同的服务协议(默认的dubbo协议这是一种tcp协议)

 
  1. private void doExportUrls() {

  2. List<URL> registryURLs = loadRegistries(true);

  3. for (ProtocolConfig protocolConfig : protocols) {

  4. doExportUrlsFor1Protocol(protocolConfig, registryURLs);

  5. }

  6. }

1.4 暴露本地服务

 
  1. private void exportLocal(URL url) {

  2. if (!Constants.LOCAL_PROTOCOL.equalsIgnoreCase(url.getProtocol())) {

  3. URL local = URL.valueOf(url.toFullString())

  4. .setProtocol(Constants.LOCAL_PROTOCOL)

  5. .setHost(LOCALHOST)

  6. .setPort(0);

  7. ServiceClassHolder.getInstance().pushServiceClass(getServiceClass(ref));

  8. Exporter<?> exporter = protocol.export(

  9. proxyFactory.getInvoker(ref, (Class) interfaceClass, local));

  10. exporters.add(exporter);

  11. logger.info("Export dubbo service " + interfaceClass.getName() + " to local registry");

  12. }

  13. }

"url": "dubbo://192.168.88.1:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&bind.ip=192.168.88.1&bind.port=20880&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=8136&qos.port=22222&side=provider&timestamp=1536585127237"

接口proxyFactory是基于@SPI("javassit")的接口,@Adaptive注解在方法上表示代理。动态编译类ProxyFactory$Adaptive

2.暴露远程服务 -- 暴露给远程客户端的IP和端口号通过网络实现通信
    Export dubbo service com.alibaba.dubbo.demo.DemoService to url dubbo://192.168.20.102:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider & bind.ip =192.168.20.102&bind.port=20880&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=3068&qos.port=22222&side=provider&timestamp=1535794806217, dubbo version: 2.0.0, current host: 192.168.20.102
    Register dubbo service com.alibaba.dubbo.demo.DemoService url dubbo://192.168.20.102:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&bind.ip=192.168.20.102&bind.port=20880&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=3068&qos.port=22222&side=provider&timestamp=1535794806217 to registry registry://106.14.123.227:2181/com.alibaba.dubbo.registry.RegistryService?application=demo-provider&dubbo=2.0.0&pid=3068&qos.port=22222&registry=zookeeper&timestamp=1535794806204, dubbo version: 2.0.0, current host: 192.168.20.102

3.启动netty
    Start NettyServer bind /0.0.0.0:20880, export /192.168.20.102:20880, dubbo version: 2.0.0, current host: 192.168.20.102

4.打开zk
    zookeeper.ClientCnxn: Opening socket connection to server 106.14.123.227/106.14.123.227:2181. Will not attempt to authenticate using SASL (unknown error)

5.注册zk
    Register: dubbo://192.168.20.102:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=3068&side=provider&timestamp=1535794806217, dubbo version: 2.0.0, current host: 192.168.20.102

6.监听zk
    Subscribe:provider://192.168.20.102:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&category=configurators&check=false&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=3068&side=provider&timestamp=1535794806217, dubbo version: 2.0.0, current host: 192.168.20.102
    Notify urls for subscribe url provider://192.168.20.102:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&category=configurators&check=false&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=3068&side=provider&timestamp=1535794806217, urls: [empty://192.168.20.102:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&category=configurators&check=false&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=3068&side=provider&timestamp=1535794806217], dubbo version: 2.0.0, current host: 192.168.20.102

猜你喜欢

转载自blog.csdn.net/oqqJohn1234567890/article/details/82701493