前言
SpringCloudAlibaba实际上对我们的SpringCloud2.x和1.x实现拓展组件功能,相当于对SpringCloud 一代中的一些组件做了一些替代和补充。
SpringCloud一代 | SpringCloudAlibaba | |
---|---|---|
注册中心 | Eureka | nacos |
消息中间件 | 默认三方rabbitmq | RocketMq |
分布式事务解决方案 | 第三方替代方案:2pc | Seata |
分布式配置中心 | SpringCloudConfig | nacos |
熔断降级 | Hystrix | Sentinel |
网关 | Zuul | Gateway |
这篇文章主要针对 注册中心、配置中心 nacos ,熔断降级 Sentinel 和网关Gateway进行实践。
准备工作
与一代Spring Cloud 不同,nacos 和 熔断降级展示面板都需要通过部署方式,不再由我们搭建模块来使用。我这里直接使用docker 来对nacos 和sentinel-dashboard 进行部署搭建。
一、安装Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
二、搭建nacos
2、1 拉取镜像文件
docker pull nacos/nacos-server
2、2 创建本地的映射文件,custom.properties
mkdir -p /root/nacos/init.d /root/nacos/logs
touch /root/nacos/init.d/custom.properties
2、3 在custom.properties文件中写入以下配置
management.endpoints.web.exposure.include=*
2、4创建容器:使用standalone模式并开放8848端口,并映射配置文件和日志目录,数据库默认使用 Derby(这里直接使用最为方便一种方式)
docker run -d -p 8848:8848 -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /root/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties -v /root/nacos/logs:/home/nacos/logs --restart always --name nacos nacos/nacos-server
2、5在页面上输入
http://ip:8848/nacos/ 用户名默认是 nacos 密码 nacos
三、搭建sentinel-dashboard
3、1拉取镜像
docker pull bladex/sentinel-dashboard
3、2 通过镜像运行容器
(通过这种方式页面展示的端口为 8858 API端口为:8719)
docker run --name sentinel -d -p 8858:8858 -d ec702979af42
3、3 页面上输入http://IP:8858 用户名默认是 sentinel 密码 sentinel
代码实践
一、搭建maven 父目录
1、搭建父文件pom.xml固定版本号
<groupId>com.yin</groupId>
<artifactId>springcloud-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>nacos</module>
<module>nacos_consumer</module>
<module>gateway</module>
</modules>
<!-- 统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<springboot.version>2.2.2.RELEASE</springboot.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- spring boot 2.2.2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud Hoxton.SR1 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud 阿里巴巴 -->
<dependency>
<groupId>com.alibaba.cloud</groupI