一. Dubbo的前世今生
2011年10月27日,阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo,服务治理和SOA的设计理念开始逐渐在国内软件行业中落地,并被广泛应用。
- 早期版本的dubbo遵循SOA的思想,是面向服务架构的重要组件。
- 如今版本的Dubbo作为Spring Cloud的二进制通信方案来发挥Dubbo的性能优势
目前Dubbo在企业中有两种开发思路
-
基于SOA思想
- 将传统单一应用拆分为web(消费者)模块和service(提供者)模块,基于Dubbo通信
-
辅助SpringCloud架构提升效率
- Dubbo基于TCP(传输层)协议,效率更高。可以替换Feign,提升高并发压力
-
二. Dubbo的快速入门
远程调用存在的问题
-
服务消费者该如何获取服务提供者的地址信息?
-
当服务提供者发生变化时如何进行快速切换?
-
提供者和消费者如何监控?
2.1 Dubbo的基本架构
![image-20220919105625498](https://i-blog.csdnimg.cn/blog_migrate/af024215d8844bfc4814d0ad225d2ac8.png)
节点角色说明:
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方。 |
Consumer | 调用远程服务的服务消费方。 |
Registry | 服务注册与发现的注册中心。 |
Monitor | 统计服务的调用次数和调用时间的监控中心。 |
调用关系说明:
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
2.2 Nacos
Nacos是阿里巴巴的产品,是一个集服务发现,配置管理的平台,在国内受欢迎程度较高。
1、找到今日资料中的nacos安装包
2、解压到没有中文和特殊字符的目录
3、进入bin目录,执行启动命令
#进入bin目录
cd bin
#启动
startup.cmd -m standalone # -m指定启动模式 standalone标准单机版
4、浏览器查看:http://127.0.0.1:8848/nacos
2.3 管理后台
DubboAdmin是阿里巴巴管理提供的管理控制台,可以实现服务查询,详情展示,服务测试等功能。借由DubboAdmin可以更好的帮助开发人员对服务进行管理和监控
#1、下载代码:
git clone https://github.com/apache/dubbo-admin.git
#2、在 dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址nacos://127.0.0.1:8848
#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 用户名root 密码root
2.4 入门案例
需求:使用Dubbo构建分布式架构,完成根据用户id查询用户
1. 服务提供者
![image-20220919141933666](https://i-blog.csdnimg.cn/blog_migrate/0e9a6cc9e01be12a83852660b807267f.png)
搭建环境
(1)创建user-provider模块导入依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--dubbo的起步依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.8</version>
</dependency>
</dependencies>
(2)编写引导类
package cn.itcast.user;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("cn.itcast.user.mapper")
@SpringBootApplication
public class UserProviderApplication {
public static void main(String[] args) {
SpringApplication.run