首先看boot和dubbo版本:
这里介绍最新版 2.71
这个版本我试过,不用其他配置,就可以在controller正常引用服务,不会出现null指针异常。
注意:@Service,@Reference,@EnableDubbo注解都是org.apache.dubbo包下
1,引入jar包:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<dubbo.version>2.7.1</dubbo.version>
<!-- 这里是因为我的pom第一行报错,如果你的没报错可以不引入 -->
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 1,引入dubbo的starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- 2,引入zookeeper注册中心,包含zookeeper和curator -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
<!-- 3,dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
2,开启springboot的dubbo功能,@EnableDubbo ?
网上介绍的是@EnableDubboConfiguration,但是 2.71版本已经没有这个类了,可怕的是连官网也是@EnableDubboConfiguration。。。
然后我用的是@EnableDubbo
这是@EnableDubbo的部分源码,渣渣表示根本看不懂源码内容,只好看看注释(灬ꈍ ꈍ灬),应该是它吧_
/**
* Enables Dubbo components as Spring Beans, equals
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
//引入了@EnableDubboConfig
@EnableDubboConfig
@DubboComponentScan
public @interface EnableDubbo {
3,服务提供者-provider,在接口的实现类上添加@service即可
server.port=8080
#spring.application.name=dubbo-privider
dubbo.application.name=dubbo-privider-8080
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#使用dubbo协议,将服务暴露在20880端口,协议由提供方指定,消费方被动接受(订阅)
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.consumer.check=false
# roundrobin 轮询机制, random 随机机制, leastactive 最少活跃调用数机制
#dubbo.provider.loadbalance=roundrobin
4,服务消费者-consumer,用@Reference引用服务
@Reference
UserService userService;
我只写了最基本的配置::
server.port=8081
#spring.application.name=dubbo-consumer
dubbo.application.name=dubbo-consumer-8081
dubbo.registry.address=zookeeper://127.0.0.1:2181
# roundrobin 轮询机制, random 随机机制, leastactive 最少活跃调用数机制
#dubbo.consumer.loadbalance=roundrobin
5,关于轮询机制
如果只在provider或者consumer设置loadbalance=roundrobin