序言:dubbo 是阿里巴巴开发的一款开源的java rpc 框架,也就是远程调用框架。本文将说明dubbo服务拆分的实现思路。
本文是基于黑马探花交友前置课程dubbo做出的笔记记录。
完整视频和资料
通过百度网盘分享的文件:黑马
链接:https://pan.baidu.com/s/1zDHmtJi53q49Hsz3kBfjuA?pwd=1234
提取码:1234
复制这段内容打开「百度网盘APP 即可获取」
案例采用的注册中心是nacos,服务提供者用于向注册中心注册自己提供的服务,消费者用户向注册中心订阅服务。,都需要注册到nacos上面。然后通过dubbo中的admin进行监控。
首先需要将nacos和dubbo-admin启动起来,然后再进行将传统架构的springboot后端三层架构包模式进行拆分。
首先nacos,我们需要进入nacos 配置文件的bin目录
然后在终端中打开该目录,进行命令启动。
因为我们是单机,所以这样启动就好了
startup.cmd -m standalone
这样就启动好了
访问路径 http://127.0.0.1:8848/nacos 这样就打开了。现在还没有服务注册,所以没有任何服务列表。
下面需要去启动dubbo-admin,用于监控服务和后面的服务拆分和调用
#1、下载代码:
git clone https://github.com/apache/dubbo-admin.git
#2、在 dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址
#3、构建
mvn clean package -D maven.test.skip=true
#4、启动
mvn --projects dubbo-admin-server spring-boot:run
#或者
cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar
#5、访问 http://localhost:8080
第二个步骤是需要配置nacos注册中心的地址的,因为我们的dubbo-admin需要去监控注册中心的服务,所以需要有这个配置。下面就是启动dubbo-admin。
在该位置打开终端然后执行上面的命令。第一步是下载用的,下载好了不用执行。
在构建的过程中可能出现问题。
但是看这个报错,没有什么影响,我的dubbo-admin构建好了。然后启动
浏览器输入路径访问,这样也启动好了,这个默认的登录账号密码都是root
下面进行服务拆分
看案例代码,我们主要是对该目录结构进行拆分。拆分为服务提供者和服务消费者。还有就是我们需要抽取公共部分的代码单独放在一个模块里面。
那么需要考虑的是服务提供者是那个部分呢?其实就是负责业务的。我们把mapper和service作为提供者部分,然后消费就是controller部分。主要就是这样。
每一个模块都需要去单独配置一下yml 和maven。maven中的依赖一些需要重复使用的我们可以放在父模块中,作为公共依赖,然后在子模块中引入。
这里设计到的就是一个maven的知识, dependencyManagement 和 dependencies。
Dependencies相对于dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
dependencyManagement里只是声明依赖,并不自动实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
我们的服务提供者拆分了原来的impl和mapper,注意service接口我们将会做成公共api模块
然后就是yml 配置
server:
port: 18081
spring:
datasource:
url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
username: root
password: admin123
driver-class-name: com.mysql.jdbc.Driver
# 应用名称
application:
name: user-provider
logging:
level:
cn.itcast: debug
pattern:
dateformat: HH:mm:ss:SSS
#配置dubbo提供者
#dubbo协议和访问端口
dubbo:
protocol:
name: dubbo
port: 20881
#配置注册中心地址
registry:
address: nacos://127.0.0.1:8848
scan:
base-packages: cn.itcast.user.service
我们需要在实现类上对外暴露dubbo服务,在上面的yml中我们需要去配置扫描scan,也就是需要扫描到这个注解。所以我们只需要配置一下这个包路径让它扫描到。服务提供者需要注册nacos,所以需要配置注册中心的地址。然后上面还配置了dubbo的协议和端口。我们的服务提供者启动后访问端口就是我们的yml配置的server port,那么这里配置dubbo端口是干什么。其实这里dubbo-admin要监控的话其实也是一个服务。tomcat是作为外层的容器的,内部又运行了一个netty服务器。
然后就是消费者模块了。其实抽取出来一个controller。
我们这里需要调用service,这里是生产者的接口。dubboreference注解标注调用的生产者接口。
在消费者的yml这里呢,我们只要去写上dubbo注册中心的地址就可以了。
server:
port: 18080
spring:
application:
name: user-consumer
logging:
level:
cn.itcast: debug
pattern:
dateformat: HH:mm:ss:SSS
dubbo:
registry:
address: nacos://127.0.0.1:8848
没有接口service和实体类是会报错的,但是我们都把它们抽取到一个单独的模块里面了。
然后呢,我们在提供者和消费者pom中引入该模块就可以了。
将提供者和消费者的服务都启动起来。可以在dubbo-admin和nacos去查看服务
在注册中心我们也可以去查看
测试服务远程调用。没有问题。
案例拆分后的代码完整见github
dubbo服务拆分
有疑问欢迎联系我