# blog-cloud
**Repository Path**: idore2008/blog-cloud
## Basic Information
- **Project Name**: blog-cloud
- **Description**: No description available
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-08-26
- **Last Updated**: 2021-08-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Blog Cloud
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
## 版本介绍
- java.version 1.8
- spring-boot.version:2.3.2.RELEASE
- spring-cloud.version:Hoxton.SR8
- com.alibaba.cloud.version:2.2.3.RELEASE
- nimbus-jose-jwt.version:9.1.1
- lombok.version:1.18.12
- fastjson.version:1.2.62
- druid.version:1.1.10
- mybatis-plus.version:3.2.0
- mysql.version:5.1.38
>版本参考地址:[https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E](https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E)
---
## 软件架构
### 一、组件
组件名称|版本号|描述
:----|:----|:----
Nacos Discovery |----| 注册中心
Nacos Config |----| 配置中心
Dubbo Spring Cloud |----| 服务通信
Spring Cloud Gateway |----| 网关
Spring Cloud Security |----| 安全认证
Spring Cloud Hystrix |----| 服务熔断
Spring Cloud Sleuth + Zipkin |----| 调用链监控
Spring Data Redis |----| NoSQL数据库
... | ... | ...
### 二、模块
模块名称|描述|备注
:----|:----|:----
blog-gateway | 网关 | --
blog-auth | 认证中心 | --
blog-common | 公共组件 | --
blog-contract | Dubbo接口暴露 | --
blog-user | 用户权限管理 | --
... | ... | ... |
---
## 功能介绍
### 一、Nacos注册中心、配置中心
> 以网关配置为例(blog-gateway)
> 官网文档:
>> 注册中心:[https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc](https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc)
>> 配置中心:[https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc](https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc)
Nacos Server 启动后,进入 http://localhost:8848/nacos/index.html 查看控制台(默认账号名/密码为 nacos/nacos):
#### 1、添加依赖
```
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
```
#### 2、添加配置文件(bootstrap.yml)
```
spring:
application:
name: blog-gateway
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 # Nacos服务地址
file-extension: yaml # 配置格式
# shared-dataids: all-gateway.yaml # 全局引入的配置
# refresh-dataids: all-gateway.yaml # 实现动态配置刷新
namespace: 57cace63-8a7e-4051-825b-ba5ff39f9911 # 命名空间
profiles:
active: dev # 环境配置
```
#### 3、创建配置文件
在配置管理 》 配置列表 中添加 `blog-gateway-dev.yaml` 文件。
> 命名规则: 服务名称(`blog-gateway`) + 环境名称(`dev、test`) + 后缀(`.yaml、.properties`)
#### 4、注意事项
- 命名规则必须一致,否则不生效;
- 配置格式必须对应,否则不生效;
- 如使用命名空间,则命名空间必须对应,否则不生效;
- 如使用全局配置,必须配置(`shared-dataids、refresh-dataids`)全局引入的配置和实现动态配置刷新。
#### 5、Nacos基本概念
5.1、命名空间(namespace)
命名空间可用于进行不同环境的配置隔离,一般一个环境划分一个命名空间。
5.2、配置分组(group)
配置分组用于讲不同的服务可以归类到同一分组,一般讲一个项目的配置分到一个组中。
5.3、配置集(dateId)
在系统中,一个配置文件就是一个配置集,一般微服务的配置就是一个配置集。
### 二、熔断&限流
#### 1、添加依赖
```
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
org.springframework.boot
spring-boot-starter-data-redis-reactive
```
#### 2、添加配置
```
# 配置路由规则
routes:
# 采用自定义路由ID
- id: blog-auth
# 采用 LoadBalanceClient 方式请求,以 lb:// 开头,后面的是注册在 Nacos 上的服务名
uri: lb://blog-auth
predicates:
- Path=/auth/**
filters:
- StripPrefix=1
- name: Hystrix # 熔断
args:
name: fallbackcmd
# fallback 时调用的方法 http://localhost:8080/fallback
fallbackUri: forward:/fallback
- name: RequestRateLimiter # 限流
args:
key-resolver: '#{@uriKeyResolver}' # 限流过滤器的 Bean 名称
redis-rate-limiter.replenishRate: 1 # 希望允许用户每秒处理多少个请求
redis-rate-limiter.burstCapacity: 3 # 用户允许在一秒钟内完成的最大请求数
```
#### 3、熔断实现
3.1、Hystrix服务降级处理
```
@Slf4j
@Component
public class HystrixFallbackHandler implements HandlerFunction {
@Override
public Mono handle(ServerRequest serverRequest) {
Optional