dubbo的初使用
dubbo简介
dubbo官网
一、背景
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
二、dubbo架构图
节点角色说明
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
调用关系说明
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
介绍结束,下面开始初步使用
准备一个小项目
A服务
Service接口
public interface UserService {
/**
*查询所有
* @return
*/
List<UserInfo> findAll();
/**
* 根据用户id查询用户地址列表
* @param userId
* @return
*/
List<UserAddress> getUserAddressList(String userId);
}
实现类
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserInfoMapper userInfoMapper;
@Autowired
private UserAdderssMapoper userAdderssMapoper;
@Override
public List<UserInfo> findAll() {
return userInfoMapper.selectAll();
}
@Override
public List<UserAddress> getUserAddressList(String userId) {
UserAddress userAddress = new UserAddress();
userAddress.setId(userId);
return userAdderssMapoper.select(userAddress);
}
}
端口号
server.port=8001
# mysql数据库连接
spring.datasource.url=jdbc:mysql://192.168.113.132:3306/gmall?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
B服务
@Controller
public class OrderController {
// @Autowired
@Autowired
private UserService userService;
// @RequestMapping("trade")
// public String trade() {
// return "index";
// }
@RequestMapping("trade")
@ResponseBody
public List<UserAddress> trade(String userId) {
return userService.getUserAddressList(userId);
}
}
端口号
server.port=8081
spring.thymeleaf.cache=false
spring.thymeleaf.mode=LEGACYHTML5
使用场景
B服务想要调用A服务中的UserService来查找用户的地址。
初使用
一、一台空的虚拟机,操作系统为CentOS7
二、安装jdk
先卸载jdk原始版本
- rpm -qa | grep jdk
解压jdk
tar -zxvf jdk-8u152-linux-x64.tar.gz
# vim /etc/profile
在最后添加如下配置
source /etc/profile
使配置文件生效。永久生效则必须要reboot!
# java -version
三、安装zookeeper
官方推荐使用zookeeper注册中心
zookeeper版本 zookeeper-3.4.11.tar.gz
拷贝zookeeper-3.4.11.tar.gz到/opt下,并解压缩
改名叫zookeeper
mv zookeeper-3.4.11.tar.gz zookeeper
拷贝/opt/zookeeper/conf/zoo_sample.cfg
到同一个目录下改个名字叫zoo.cfg
然后咱们启动zookeeper
进入bin目录执行文件
./zkServer.sh start
./zkServer.sh status
如上则安装成功
默认的端口号是2181!
四、安装tomcat
- 解压apache-tomcat-8.5.24.tar(1).gz
tar -zxvf apache-tomcat-8.5.24.tar(1).gz
- 重命名apache-tomcat-8.5.24.tar(1).gz
mv apache-tomcat-8.5.24.tar(1).gz tomcat8
- 运行测试,进入tomcat8下bin目录
./startup.sh
tomcat启动成功
五、安装 dubbo 监控中心
-
将dubbo-admin-2.6.0.war放入tomcat8的webapps文件夹下
-
此时如果你的tomcat处于启动状态则会自动多出来一个文件夹dubbo-admin-2.6.0
-
将tomcat关掉
./shutdown.sh
在关闭的时候,一定要注意不能报错!
如果报错,重新安装tomcat。
- 将tomcat 中webapps 中的dubbo-admin-2.6.0.war 删掉!
rm -rf dubbo-admin-2.6.0.war
- 修改名称
mv dubbo-admin-2.6.0 dubbo-admin
- 重启tomcat
./startup.sh
-
访问http://192.168.113.132:8080/dubbo-admin/ 输入用户名,密码 root root
-
正常进入监控中心
http://192.168.67.219:8080/dubbo-admin/governance/providers
此时并没有服务提供者
六、在测试项目中配置dubbo
-
加入依赖
-
以来的版本
<dubbo-starter.version>1.0.10</dubbo-starter.version> <dubbo.version>2.6.0</dubbo.version> <zkclient.version>0.10</zkclient.version>
-
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.gitee.reger</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> </dependency>
-
配置服务提供者
-
改变UserServiceImpl的@Service注解
一定要注意
-
在application.properties中添加
#dubbo配置注册中心 #服务提供者名称 spring.dubbo.application.name=usermanage spring.dubbo.registry.protocol=zookeeper #zookeeper端口号 spring.dubbo.registry.address=192.168.113.132:2181 #扫描包 spring.dubbo.base-package=com.atguan.gmall #协议名称 spring.dubbo.protocol.name=dubbo
-
-
配置服务消费者
-
添加注解 Reference注解引用服务
// @Autowired @Reference private UserService userService; // @RequestMapping("trade") // public String trade() { // return "index"; // } @RequestMapping("trade") @ResponseBody public List<UserAddress> trade(String userId) { return userService.getUserAddressList(userId); }
-
在application.properties中添加
#注册中心的地址配置 #服务消费者名称 spring.dubbo.application.name=order-web spring.dubbo.registry.protocol=zookeeper spring.dubbo.registry.address=192.168.113.132:2181 spring.dubbo.base-package=com.atguan.gmall spring.dubbo.protocol.name=dubbo spring.dubbo.consumer.timeout=10000 spring.dubbo.consumer.check=false
-
-
七、重启两个服务
此时查看监控中心
http://192.168.67.219:8080/dubbo-admin/governance/providers
服务提供者和消费者成功注册