Dubbo是一个PCR远程服务调用框架,前面我们使用的RestTemplate进行的服务调用,但是Dubbo相比起来优势更大,本章进行整合dubbo。
注意:前面一章节进行了项目结构重构,本章节是在重构之后的基础上进行的改造。(已经将1,2,3章节的代码复制到第四章节的空项目结构上)。
一、新增依赖
向父工程新增依赖
<?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服务
新建一个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服务的实现类里面的逻辑处理结果。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/12763.html