当系统的并发达到一定数量的时候传统的模式已经不能够满足要求了,这时就需要将项目拆分成若干个子项目,独自完成各自的功能,在开发上,不同的团队可以负责不同的子项目。本章是在SpringBoot1.5上利用Dubbo完成基于SOA的分布式系统搭建。本章为基础篇,进阶内容,请参看【下一篇】。
个人学习总结:
链接:【springboot、springcloud、docker 等,学习目录】
分布式架构: 多个子系统相互协作通讯完成整体业务。
集群: 同一个工程部署多台服务器。
SOA: Service Oriented Architecture 面向服务的架构。整个项目拆分成服务层(Service)和表现层(Controller),Service层负责业务逻辑,Controller层负责页面交互。
Provider: 服务提供方。
Consumer: 服务消费方。
Registy: 服务注册发现中心。中介,此处使用zookeeper。
Monitor: 监控中心。
Container: 服务运行容器。服务发布需要容器。
下载zookeeper:
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
安装:解压自行安装,我是使用的是docker镜像, 参看Docker 系列。
dubbo admin 是一个独立的工程,用作监控,可以看到服务提供方、调用方的数量、状态等,作用类似第十三章 Druid。
1、下载地址:https://codeload.github.com/apache/incubator-dubbo-ops/zip/master
2、解压:
可以看到它其实也是一个springboot工程,我们只需要 dubbo-admin 这一模块。
2.1、在dubbo-admin 目录下使用maven打包:mvn clean package
2.2、打包完,进入target 目录将classes 下的application.properties配置文件拷贝到与打包好的jar同一级目录。
3、修改配置文件:
# 项目端口号
server.port=8050
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=root
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
4、使用 java -jar XXX.jar 命令运行jar包。
5、访问:127.0.0.1:8050 用户名、密码:root
可以在这里看到服务提供者、消费者的数量、状态等。
注意:此处的dubbo-admin 为独立工程,可使用上述方法运行。我将其引入到了工程中,与项目无关,仅仅是为了方便管理。
代码较多,以下只涉及到几个重要点代码。具体代码【下拉代码】
1、项目结构:
分为common、pojo、interface、service、controller 5个模块,其中Controller、Service为独立工程。
2、主要pom依赖:
controller层: 依赖的是 interface层,不在是service层
com.coolron
springboot-dubbo-interface
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter-web
io.dubbo.springboot
spring-boot-starter-dubbo
1.0.0
service层: 由于service层是服务层,所以引入的主要依赖与controller一样
3、配置文件:
service 层:服务提供者配置
server.context-path=/
server.port=8090
### 数据库、mybatis 相关配置 省略 ###
### dubbo 服务提供者配置 ###
# dubbo 服务提供者名称
spring.dubbo.application.name=provider
# 注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
# zookeeper 集群配置
#spring.dubbo.registry.address=zookeeper://127.0.0.1:2182?backup=127.0.0.1:2181,127.0.0.1:2183
spring.dubbo.protocol.name=dubbo
# dubbo 服务的端口 无需知道它运行在哪个端口 可设置成 -1
spring.dubbo.protocol.port=20880
# 扫描服务所在的包 即:使用了dubbo 中@service注解的包路径
spring.dubbo.scan=com.coolron.service.impl
controller层:服务消费者配置
server.context-path=/
server.port=8091
### Dubbo 服务消费者配置 ###
# 消费者名称
spring.dubbo.application.name=consumer
# 注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
# 集群配置
#spring.dubbo.registry.address=zookeeper://127.0.0.1:2182?backup=127.0.0.1:2181,127.0.0.1:2183
# 需要使用dubbo服务的包路径 即使用:@Reference 注解的包路径
spring.dubbo.scan=com.coolron
4、service层注意:
将所有serviceImpl类上@Service注解换成dubbo提供的。
示例:
/**
* @Auther: xf
* @Date: 2018/11/29 22:00
* @Description:
* service 注解不在是spring提供的,是com.alibaba.dubbo.config.annotation.Service注解
* 版本、超时、接口属性可不配
*/
@Service(version = "1.0.0.1",timeout = 10000, interfaceClass = UserService.class)
public class UserServiceImpl implements UserService {...}
5、controller层注意:
所有需要引入service服务的注解都改成@Reference。
示例:
/**
* @Auther: xf
* @Date: 2018/11/29 22:02
* @Description: @Reference 为Dubbo提供
*/
@Slf4j
@RestController
@RequestMapping(value = "user")
public class UserController {
// 将@Autowired 替换成 @Reference
@Reference
private UserService userService;
...
}
6、启动:
先启动Service模块,再启动Controller模块。
7、查看dubbo admin 监控中心:
可以看到服务提供者、消费者的详细信息。
8、测试:
请求接口:http://localhost:8091/user/getUser/2 正常得到结果。
至此,基于dubbo的soa分布式服务搭建完毕。
总结:
代码地址:
https://gitee.com/cpla026/dubbo/tree/master/springboot-dubbo-parent