Zookeeper+dubbo+Springboot集成总结


1. 尽量用XML 集成,这也的Dubbo官方推荐的集成方式

自己在使用注解集成过程中发现有坑:Springmvc包扫描和dubbo包扫描冲突,导致消费端一直拿不到代理对象(null),非常蛋疼,所以猜测可能还有其他坑

搭建环境主要是几个pom文件非常重要

项目结构:

dubbo-demo
	|- common
				|- pom.xml
  |- consumer
  			|- pom.xml
  |- provider
  			|- pom.xml
  |- pom.xml

dubbo-demo 的pom.xml

<?xml version="1.0" encoding="UTF-8"?>

  4.0.0

  com.grady
  dubbo-demo
  pom
  1.0-SNAPSHOT

  
    consumer
    provider
    common
  

  
    org.springframework.boot
    spring-boot-starter-parent
    2.1.3.RELEASE
  

  
    UTF-8
    1.8
    2.5.5
    0.10
    1.18.2
    2.1.3.RELEASE
    1.0.0

    1.7.25
    1.1.10
  


  
    
      
      
        org.springframework.boot
        spring-boot-starter
        ${spring-boot.version}
      

      
        org.projectlombok
        lombok
        ${lombok.version}
        provided
      

      
      
        com.alibaba
        dubbo
        ${dubbo.version}
        
          
            log4j
            log4j
          
        
      

      
      
        com.101tec
        zkclient
        ${zkclient.version}
      

    
  

  
    
      
        org.apache.maven.plugins
        maven-compiler-plugin
        
          ${java.version}
          ${java.version}
          UTF-8
        
      

      
        org.apache.maven.plugins
        maven-resources-plugin
        
          UTF-8
        
      
    
  


主要是作为父pom用

然后的common

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

  
    dubbo-demo
    com.grady
    1.0-SNAPSHOT
  
  4.0.0

  common

  
    
      org.springframework.boot
      spring-boot-starter
    

    
      org.springframework.boot
      spring-boot-starter-test
      test
    

    
      org.projectlombok
      lombok
      provided
    

  

  
    
      
        org.springframework.boot
        spring-boot-maven-plugin
      
    
  

common 主要是作为公共的jar来引用

再是provider

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

  
    dubbo-demo
    com.grady
    1.0-SNAPSHOT
  
  4.0.0

  provider

  
    
      com.grady
      common
      1.0-SNAPSHOT
    

    
      org.springframework.boot
      spring-boot-starter
    

    
      org.springframework.boot
      spring-boot-starter-test
      test
    

    
      com.alibaba
      dubbo
      
        
          log4j
          log4j
        
      
    

    
    
      com.101tec
      zkclient
      ${zkclient.version}
    

  

  
    
      
        org.springframework.boot
        spring-boot-maven-plugin
      
    
  

关键是provider的resource目录下的内容

Spring-dubbo-provider.xml

使用@ImportResource({"classpath:spring-dubbo-provider.xml"})进行配置文件加载

<?xml version="1.0" encoding="UTF-8"?>


  
  
  
  
  
  
  

  
  

再看consumer的pom.xml

<?xml version="1.0" encoding="UTF-8"?>

 
   dubbo-demo
   com.grady
   1.0-SNAPSHOT
 
 4.0.0

 consumer

 
   
     com.grady
     common
     1.0-SNAPSHOT
   

   
     org.springframework.boot
     spring-boot-starter
   

   
     org.springframework.boot
     spring-boot-starter-web
   

   
     com.alibaba
     dubbo
     
       
         log4j
         log4j
       
     
   

   
   
     com.101tec
     zkclient
     ${zkclient.version}
   
 

 
   
     
       org.springframework.boot
       spring-boot-maven-plugin
     
   
 

consumer 的resource目录下的内容

spring-dubbo-consumer.xml

使用@ImportResource({"classpath:spring-dubbo-consumer.xml"})进行加载

<?xml version="1.0" encoding="UTF-8"?>


  
  
  
  
  

  


将consumer 和provider 启动后,查看Zookeeper里的内容

先只启动provider

[zk: localhost:2181(CONNECTED) 18] ls /dubbo/com.grady.service.UserService/consumers
[]

可以看到consumers没有内容

[zk: localhost:2181(CONNECTED) 19] ls /dubbo/com.grady.service.UserService/providers
[dubbo%3A%2F%2F100.118.67.11%3A20880%2Fcom.grady.service.UserService%3Fanyhost%3Dtrue%26application%3Dprovider-demo%26dubbo%3D2.5.5%26generic%3Dfalse%26interface%3Dcom.grady.service.UserService%26methods%3DfindUser%26pid%3D51651%26side%3Dprovider%26timestamp%3D1566208057732]

可以看到providers中有提供者的信息(比如ip,提供的借口等)

再启动consumer

zk: localhost:2181(CONNECTED) 20] ls /dubbo/com.grady.service.UserService/consumers
[consumer%3A%2F%2F100.118.67.11%2Fcom.grady.service.UserService%3Fapplication%3Dconsumer-demo%26category%3Dconsumers%26check%3Dfalse%26dubbo%3D2.5.5%26interface%3Dcom.grady.service.UserService%26methods%3DfindUser%26pid%3D51946%26side%3Dconsumer%26timestamp%3D1566208217754]

consumer启动成功后可以看到Zookeeper中有对应consumer的内容