1.版本匹配問題
dubbo官網上是有說明的,也有具體的例子。https://github.com/apache/incubator-dubbo-spring-boot-project
1.x版本的springboot需要對應0.1版本的dubbo-spring-boot-starter跟較低版本的dubbo。
2.x版本的springboot對應0.2版本的dubbo-spring-boot-starter跟2.6.x版本的dubbo。
至於zookeeper倒是沒有明確規定。
2.包說明
<dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
zkclient包服務提供者有就行了,服務消費者可以不打。
其他的,依照官網,需要打的starter也有不同:
2.x的話要打三個包:
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <!-- Dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.5</version> </dependency> <!-- Spring Context Extras --> <dependency> <groupId>com.alibaba.spring</groupId> <artifactId>spring-context-support</artifactId> <version>1.0.2</version> </dependency>
1.x的話只打那個starter就可以了(注意要0.1.0的)。
還有,0.2.1的包經常搜不到,所以我打了0.2.0的,但是官網最新的是0.2.1。
3.不同版本的配置
體現在dubbo的service、reflect、跟配置信息的不同。
1.x版本:
服務提供者:
# dubbo springboot 配置 dubbo.application.name=dubbo-provider dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.scan.base-packages=com.chriswei.bean
@Service @Component public class helloProviderimpl implements helloProvider {}
服務消費者:
# dubbo springboot 配置 dubbo.application.name=live-dubbo-comsumer dubbo.registry.address=zookeeper://127.0.0.1:2181
public class HelloConsumer { @Reference private helloProvider hello; }
1.x版本這么匹配就算是能用了,控制台會打印出你發布出去的服務,以包全名形式,當然你可以打開zkCli.cmd,輸入ls /查看一下你的服務發布出去沒有。
2.x版本的話,依據官方示例:
服務提供者:
# Spring boot application spring.application.name = dubbo-provider-demo server.port = 9090 management.port = 9091 # Base packages to scan Dubbo Components (e.g., @Service, @Reference) dubbo.scan.basePackages =com.chriswei.bean # Dubbo Config properties ## ApplicationConfig Bean dubbo.application.id = dubbo-provider-demo dubbo.application.name = dubbo-provider-demo ## ProtocolConfig Bean dubbo.protocol.id = dubbo dubbo.protocol.name = dubbo dubbo.protocol.port = 12345 ## RegistryConfig Bean dubbo.registry.id = my-registry dubbo.registry.address = zookeeper://127.0.0.1:2181
@Service( version = "1.0.0", application = "${dubbo.application.id}", protocol = "${dubbo.protocol.id}", registry = "${dubbo.registry.id}" ) @Component public class helloProviderimpl implements helloProvider {}
服務消費者:
# Spring boot application spring.application.name = dubbo-consumer-demo server.port = 8082 management.port = 8083 # Dubbo Config properties ## ApplicationConfig Bean dubbo.application.id = dubbo-consumer-demo dubbo.application.name = dubbo-consumer-demo ## ProtocolConfig Bean dubbo.protocol.id = dubbo dubbo.protocol.name = dubbo dubbo.protocol.port = 12345
@Service public class HelloConsumer { @Reference(version = "1.0.0", application = "${dubbo.application.id}", url = "dubbo://localhost:12345") private helloProvider hello; }
特別要注意dubbo://localhost:12345這個寫法,這里就這么寫,而不能寫zookeeper://127.0.0.1:2181。