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的内容