Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
TRAIN-DOCUMENT
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄杰
TRAIN-DOCUMENT
Commits
fa780b58
Commit
fa780b58
authored
Jul 17, 2020
by
黄杰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add SpringCloudAlibaba基础讲解.md
parents
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
381 additions
and
0 deletions
+381
-0
README.md
README.md
+381
-0
No files found.
README.md
0 → 100644
View file @
fa780b58
# SpringCloud Alibaba
### 框架介绍
springcloud Alibaba是阿里巴巴对springcloud框架结合自家优秀的开源组件拼凑成的一套springcloud微服务框架。通过阿里提供的中间件来迅速搭建分布式应用系统。此框架只需要添加一些注解和少量配置就可以将SpringCloud接入阿里的微服务框架,并且在文档和社区生态方面比较广泛。
springcloud阿里开源组件
1.
Nacos 是一个微服务注册中心和配置中心、同时提供了管理平台。
2.
Dubbo 可将springcloud 服务之间的调用改为dubbo协议
3.
Sentinel 中文名为哨兵 可通过流量控制、熔断降级、系统负载保护来确保服务的稳定。
### Nacos
SCAlibaba基于Nacos 实现了服务注册和配置管理功能,依靠 @EnableDiscoveryClient 进行服务注册,并兼容OpenFeign 好 RestTemplate 进行服务调用,它让我以极少的代码适配了SC的服务注册与发现标准,并默认集成了Ribbon的支持。
### Dubbo
SC默认的服务调用依赖 OpenFeign 或 RestTemplate 使用http协议进行调用
可使用spring-cloud-starter-dubbo starter可以将SC底层的http协议切换成Dubbo RPC协议 进行RPC调用。
参考文献 https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/README_CN.md
### Sentinel
服务限流降级
Sentinel具有使用简单、稳定等特点,只需要在maven中映入starter 即可生效、并且还提供了控制台可实时款里降级限流规则。
## maven Nexus 私服使用
公司maven仓库统一为公司内部搭建的Nexus私服 地址为 http://maven.ihooyah.com:8899/
用户名:admin
密码:ihooyah
!
[
img
](
https://img2018.cnblogs.com/blog/799093/201911/799093-20191119095126399-1714419836.jpg
)
**这里看下type,现在来说下nexus四种仓库类型:**
-
hosted :宿主仓库,这个仓库,是用来把公司内部的发布包部署到这个仓库里面来,然后公司内的其他人就可以从这个宿主仓库里去下载依赖使用
-
proxy:代理仓库,这个仓库不是用来给公司内部的发布部署的,是代理了公司外部的各种仓库,例如java.net,codehaus,jboss等等,最重要就是它代理了公司外部的中央仓库,但是这里也可以修改nexus连接为阿里云镜像仓库,阿里云去连接中央仓库。
-
3rd party:该仓库是个宿主仓库,主要用来部署没法从公共仓库获取的第三方依赖包,比如说,你的公司依赖于第三方支付厂商的一个依赖包,那个依赖包不是开源的,是商业的包。那么你是没有办法从maven中央仓库获取的。此时,我们可能会自己手动从支付厂商那里获取到一个jar包,下载之后上传到私服里来,就放这个仓库里,3rd-party仓库
执行mvn clean deploy命令,就可以让maven自动给我们编译源代码、运行单元测试、打成jar包、将jar包安装到本地仓库、将Jar包部署到配置的远程私服仓库里面去
### 现阶段使用的SpringCloud注解
@EnableDiscoveryClient 将服务注册到nacos
@EnableCircuitBreaker SpringCloud中使用断路器
@EnableTransactionManagement service层事务
@EnableFeignClients openfeign客户端扫包
### Nacos注册中心使用
!
[
img
](
https://upload-images.jianshu.io/upload_images/18465434-6e52eea204e1dd68.png?imageMogr2/auto-orient/strip|imageView2/2/w/804/format/webp
)
nacos注册中心原理
!
[
img
](
https://upload-images.jianshu.io/upload_images/18465434-d17f9ad8f6655a0a.png?imageMogr2/auto-orient/strip|imageView2/2/w/814/format/webp
)
nacos配置中心原理
!
[
img
](
https://upload-images.jianshu.io/upload_images/18465434-28cf0f9e370f5b64.png?imageMogr2/auto-orient/strip|imageView2/2/w/575/format/webp
)
SpringCloud上Nacos的使用
1.
maven导入
```
xml
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-config
</artifactId>
</dependency>
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-discovery
</artifactId>
</dependency>
```
2.
启动类加入@EnableDiscoveryClient注解开启向注册中心注册
3.
yaml配置文件详情
```
yaml
spring
:
application
:
name
:
common-server
cloud
:
nacos
:
config
:
server-addr
:
localhost:8848 nacos服务地址
namespace
:
scbk 指定命名空间
file-extension
:
yaml 指定文件后缀
group
:
A1 指定分组
profiles
:
active
:
dev 指定环境
```
nacos可使用命名空间进行环境隔离, 可以指定不同的环境,更好的管理开发、测试、生产的配置文件管理。
DataID 的格式:${spring.application.name}-${spring.profile.active}.${file-extension}
4.
配置文件操作
配置文件格式支持一下几种TEXT、JSON、XML、YAML、HTML、Properties
资源文件每次修改都会记录一个历史版本,历史记录默认保存时间为30天,可以根据历史记录看到每次更新的内容。还可以让指定的记录文件回滚至上一个版本。
配置文件自动更新:使用spring的@RefreshScope注解可实现nacos中的配置自动推送更新
5.
nacos集群部署
1.
修改nacos启动文件中的 conf/cluster.conf 配置文件 将其它nacos的地址和端口写入,启动后可在集群管理中看到节点的信息,节点和节点之间会自动选举 第一个启动的节点会成为 leader
2.
修改yaml配置文件
```
yaml
cloud
:
nacos
:
config
:
server-addr
:
localhost:8848,localhost:8847,localhost:8846
```
3.
也可以通过nginx代理方式来代理集群的nacos
### OpenFeign服务之间的调用使用
1.
OpenFeign提供了两个重要的注解 @FeignClient和@EnableFeignClients。
@FeignClient标注用于声明Feign客户端可访问的Web服务。
FeignClient默认的config类为 FeignClientsConfiguration ,我们也可以通过FeginClient注解上的 configuration 来自定义config类。
也可以通过yaml文件中的
fegin.okhttp.enabled= true & feign.httpclient.enabled = true 来设置使用okhttp还是apache的 HttpClient
2.
OpenFeign故障转移
如果@FeignClient指定了fallback属性,http请求调用失败时会路由到fallback处理类的相同方法中
@EnableFeignClients标注用于修饰Spring Boot应用的入口类,以通知Spring Boot启动应用时,扫描应用中声明的Feign客户端可访问的Web服务。
### gateway网关
Spring Cloud Gateway 是 Spring Cloud 的一个网关组件,它的存在是为微服务架构提供一种简单有效的统一的 API 路由管理方式。 只需要在项目中引入就可以将项目变成一个网关
```
xml
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-gateway
</artifactId>
</dependency>
```
gateway网关特征
-
基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
-
动态路由
-
Predicates 和 Filters 作用于特定路由
-
集成 Hystrix 断路器
-
集成 Spring Cloud DiscoveryClient
-
易于编写的 Predicates 和 Filters
-
限流
-
路径重写
-
**Route(路由)**
:这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
-
**Predicate(断言)**
:这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
-
**Filter(过滤器)**
:这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。
网关配置文件详解
cloud:
gateway:
routes:
\-
id: common-server
uri: lb://common-server
order: 8000
predicates:
\-
Path=/api/common/
**
//通过路径来转发
\-
After=2020-01-01T00:00:00+08:00
[
Asia/Shanghai
]
//通过请求时间来转发
-Before=2019-01-01T00:00:00+08:00
[
Asia/Shanghai
]
//通过请求时间之后来转发
- Between=2019-01-01T00:00:00+08:00[Asia/Shanghai], 2019-07-01T00:00:00+08:00[Asia/Shanghai]
- \- Cookie=sessionId, test //通过cookie来转发
- \- Header=X-Request-Id, \d+ //通过请求头参数来匹配转发
- Host=**.baidu.com 通过host内容来转发
- \- Method=GET 通过请求方式来转发
- \- Query=smile 通过匹配参数来转发
- \- RemoteAddr=192.168.1.1/24 通过请求ip来进行转发
filters:
\-
StripPrefix=2
也可以进行组合使用
### swagger-ui配置讲解
1.
通过swagger-spring-boot-starter jar包来引入swagger-ui的文档功能
maven pom如下
```
xml
<dependency>
<groupId>
com.spring4all
</groupId>
<artifactId>
swagger-spring-boot-starter
</artifactId>
</dependency>
```
2.
yaml文件配置swagger
swagger:
enabled: true //测试环境开启生产环境关闭
base-package: com.ihooyah.common.server
title: common-server
version: 1.0.0.SNAPSHOT
description: 石城播客服务端
contact:
name: common-server
3.
在应用主类中增加
`@EnableSwagger2Doc`
注解
#### **swagger常用注解:**
swagger2是通过扫描很多的注解来获取数据帮我们展示在ui界面上的,下面就介绍下常用的注解。
1、
**@Api()**
:用在请求的类上,表示对类的说明,也代表了这个类是swagger2的资源
参数:
```
text
tags:说明该类的作用,参数是个数组,可以填多个。
value="该参数没什么意义,在UI界面上不显示,所以不用配置"
description = "用户基本信息操作"
```
2、
**@ApiOperation()**
:用于方法,表示一个http请求访问该方法的操作
参数:
```
text
value="方法的用途和作用"
notes="方法的注意事项和备注"
tags:说明该方法的作用,参数是个数组,可以填多个。
格式:tags={"作用1","作用2"}
(在这里建议不使用这个参数,会使界面看上去有点乱,前两个常用)
```
3、
**@ApiModel()**
:用于响应实体类上,用于说明实体作用
参数:
```
text
description="描述实体的作用"
```
4、
**@ApiModelProperty**
:用在属性上,描述实体类的属性
参数:
```
text
value="用户名" 描述参数的意义
name="name" 参数的变量名
required=true 参数是否必选
```
5、
**@ApiImplicitParams**
:用在请求的方法上,包含多@ApiImplicitParam
6、
**@ApiImplicitParam**
:用于方法,表示单独的请求参数
参数:
```
text
name="参数ming"
value="参数说明"
dataType="数据类型"
paramType="query" 表示参数放在哪里
· header 请求参数的获取:@RequestHeader
· query 请求参数的获取:@RequestParam
· path(用于restful接口) 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
defaultValue="参数的默认值"
required="true" 表示参数是否必须传
```
7、
**@ApiParam()**
:用于方法,参数,字段说明 表示对参数的要求和说明
参数:
```
text
name="参数名称"
value="参数的简要说明"
defaultValue="参数默认值"
required="true" 表示属性是否必填,默认为false
```
8、
**@ApiResponses**
:用于请求的方法上,根据响应码表示不同响应
一个@ApiResponses包含多个@ApiResponse
9、
**@ApiResponse**
:用在请求的方法上,表示不同的响应
**参数**
:
```
text
code="404" 表示响应码(int型),可自定义
message="状态码对应的响应信息"
```
10、
**@ApiIgnore()**
:用于类或者方法上,不被显示在页面上
11、
**@Profile({"dev", "test"})**
:用于配置类上,表示只对开发和测试环境有用
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment