Dubbo的前世今生

SOA架构
Dubbo介绍
Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。
致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。
官网:http://dubbo.apache.org
目前Dubbo在企业中有两种开发思路


feign不适合高并发,所以我们替换成Dubbo
Dubbo的快速入门
Dubbo的基本架构



nacos:
安装DubboAdmin
修改配置:Dubbo-admin-server/src/main/resource下的appilication.properties文件

这里我们修改成nacos以及nacos的端口8848
在dubbo-admin目录下打开终端输入命令
mvn --projects dubbo-admin-server spring-boot:run
然后


搭建环境
(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>3.0.11</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>3.0.11</version>
</dependency>
</dependencies>
(4):配置
server:
port: 18081
spring:
datasource:
url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
username: root
password: 123
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
#dubbo注解的包扫描
scan:
base-packages: cn.itcast.user.service


依赖:
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--dubbo的起步依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>3.1.4</version>
</dependency>
</dependencies>
然后我们访问消费者的方法,,返回成功就可以了
Dubbo的最佳实践

抽取为独立模块,然后我们在各自的pom引入该模块的依赖就可以了:
<dependency>
<groupId>cn.itcast</groupId>
<artifactId>user-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
序列化

所以我们的domain类,都实现Serializable就行了

Dubbo的高级特性
启动检查

多版本



我们通过版本号,保证升级的平稳过渡
超时与重试

dubbo 利用超时机制来解决这个问题(使用timeout属性配置超时时间,默认值1000,单位毫秒)
若超时时间较短,当网络波动时请求就会失败,Dubbo通过重试机制避免此类问题的发生
一次没有成功,默认会再进行两次请求,可以通过consumer.retries设置(推荐改成0)
负载均衡

以上均可以在DubboReference里设置参数:

SpringCloud整合Dubbo
为什么需要Dubbo?


Spring Cloud Alibaba提供了微服务开发的一站式解决方案,内部包含开发分布式应用微服务的必需组件,通过 Spring Cloud编程模型轻松整合Dubbo完成微服务调用 官方地址: https://github.com/alibaba/spring-cloud-alibaba

模块分析:
1、创建dubbo-api模块,引入依赖
2、抽取公共接口
import cn.itcast.dubbo.domain.User;
public interface UserService { User queryById(Long id); }

父工程加入SpringCloud Alibaba依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
消费者和提供者引入nacos注册中心和Dubbo依赖
<!--nacos注册中心的依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--springcloud alibaba dubbo依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>








![[CVPR 2022] Rethinking the Augmentation Module in Contrastive Learning](https://img-blog.csdnimg.cn/e97524c8b7fc465ab795c705e03c1e3f.png#pic_center)















