Dubbo是一个PCR远程服务调用框架,前面我们使用的RestTemplate进行的服务调用,但是Dubbo相比起来优势更大,本章进行整合dubbo。 注意:前面一章节进行了项目结构重构,本章节是在重构之后的基础上进行的改造。(已经将1,2,3章节的代码复制到第四章节的空项目结构上)。 qq交流群导航——>231378628
向父工程新增依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- springboot的依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 关联子模块 -->
<modules>
<module>demo-provider</module>
<module>demo-consumer1</module>
<module>demo-api</module>
</modules>
<!-- 父工程的包设置为pom -->
<packaging>
pom
</packaging>
<groupId>com.example</groupId>
<artifactId>nacosdemonew</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacosdemonew</name>
<description>Demo project for SpringCloud Alibaba</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.2.7.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
新增了
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.2.7.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.11</version>
</dependency>
注意:要排除 org.springframework.spring和引入上面的support依赖否则要报错(这个坑搞了一天)。
新建一个APi子工程,专门存放远程调用的接口,如下图:
1、新增一个远程调用接口的实现类,实现上面在Api服务新增的接口,用Dubbo的DubboService注解,表示这是一个Dubbo的service层
2、在启动类新增一个开启Dubbo的注解
3、修改配置类
设置如上参数,为了方便,我把dubbo的name设置为了spring的name同名。
scan的base-packages的值为dubboservice注解所在的实现类的路径,格式如上图。
protocol等参数默认上图的设置即可。
registry.address的设置也默认上图。
1、修改配置文件
每个服务都可以作为服务消费者和提供者,所有都可以设置base-packages设置dubboservice注解的接口实现类。
subscribed-services则是填写调用服务端的名称,一定要写正确,否则会报错。
2、修改controller,新增一个测试Dubbo的接口
通过@DubboReference注解注入Api服务的TestService接口类,新写一个方法调用接口类的方法,如上图。
3、在启动类新增一个开启Dubbo的注解
1、运行服务提供方和消费方两个服务。
2、通过postman测试
调用成功,在consumer服务调用api服务的接口(中间过程)成功返回provider服务的实现类里面的逻辑处理结果。