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>