1 Star 0 Fork 0

刘立/com-spring-cloud-v1

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
spring-cloud-v1.txt 16.02 KB
一键复制 编辑 原始数据 按行查看 历史
刘立 提交于 2021-03-08 08:36 . init
bootstrap与application
1.加载顺序
bootstrap.yml(bootstrap.properties)先加载
application.yml(application.properties)后加载
bootstrap.yml可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
application.yml可以用来定义应用级别的,如果搭配spring-cloud-config使用application.yml里面定义的文件可以实现动态替换。
【Security】
默认用户名是user,密码是程序启动时自动生成的一串字符串
也可以设置对应的用户名和密码
security:
user:
name:admin
password:admin
通过在启动main类上禁用
@EnableAutoConfiguration(exclude={
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
【SpringBootAdmin】
SpringBoot提供的监控接口,例如:/health、/info等等
(服务端)
@EnableAdminServer
(客户端)
management.security.enabled=false
#http://localhost:9090表示是SpringBootAdmin服务单的IP地址以及端口号
spring.boot.admin.url:http://localhost:9090
使用eureka客户端就不用配置了
【Actuator用于监控与管理】
management.port指定管理端口
其中/health(1.x)/actuator/health(2.x)端点能够全面你检查应用监控状态
某些端点属于敏感信息,需要关闭权限认证才能查看management.security.enabled=false
在springboot1.x中,可以直接在yarn中配置security,另外默认开放所有的节点
在springboot2.x中,只默认开放info和health端口
{敏感(Sensitive)true}
autoconfig显示一个auto-configuration的报告,该报告展示所有auto-configuration候选者及它们被应用或未被应用的原因true
beans显示一个应用中所有SpringBeans的完整列表true
configprops显示一个所有@ConfigurationProperties的整理列表true
dump执行一个线程转储true
env暴露来自Spring ConfigurableEnvironment的属性true
health展示应用的健康信息(当使用一个未认证连接访问时显示一个简单的’status’,使用认证连接访问则显示全部信息详情)false
info显示任意的应用信息(只需要在yarn中配置即可,info下的内容可以随便配置)false
metrics展示当前应用的’指标’信息true
mappings显示一个所有@RequestMapping路径的整理列表true
shutdown允许应用以优雅的方式关闭(默认情况下不启用)true
trace显示trace信息(默认为最新的一些HTTP请求)true
【Eureka】
公益注册中心[eureka.client.serviceUrl.defaultZone=http://eureka.springcloud.cn/eureka/]
==========================控制台
进入Eureka控制台首页,首先看HOME页的头部
SystemStatus
Environment:环境,默认为test,该参数在实际使用过程中,可以不用更改
Datacenter:数据中心,使用的是默认的是“MyOwn”
Currenttime:当前的系统时间
Uptime:已经运行了多少时间
Leaseexpirationenabled:是否启用租约过期,自我保护机制关闭时,该值默认是true,自我保护机制开启之后为false。
Renewsthreshold:每分钟最少续约数
Renews(lastmin):最后一分钟的续约数量(不含当前,1分钟更新一次)
(红字提醒)系统在三种情况下会出现红色加粗的字体提示:
1.在配置上,自我保护机制关闭
RENEWALSARELESSERTHANTHETHRESHOLD.THESELFPRESERVATIONMODEISTURNEDOFF.THISMAYNOTPROTECTINSTANCEEXPIRYINCASEOFNETWORK/OTHERPROBLEMS.
2.自我保护机制开启了
EMERGENCY!EUREKAMAYBEINCORRECTLYCLAIMINGINSTANCESAREUPWHENTHEY'RENOT.RENEWALSARELESSERTHANTHRESHOLDANDHENCETHEINSTANCESARE
NOTBEINGEXPIREDJUSTTOBESAFE.
3.在配置上,自我保护机制关闭了,但是一分钟内的续约数没有达到85%,可能发生了网络分区,会有如下提示
THESELFPRESERVATIONMODEISTURNEDOFF.THISMAYNOTPROTECTINSTANCEEXPIRYINCASEOFNETWORK/OTHERPROBLEMS.
GeneralInfo
total-avail-memory:总共可用的内存
environment:环境名称,默认test
num-of-cpus:CPU的个数
current-memory-usage:当前已经使用内存的百分比
server-uptime:服务启动时间
registered-replicas:相邻集群复制节点
unavailable-replicas:不可用的集群复制节点,如何确定不可用?主要是server1向server2和server3发送接口查询自身的注册信息,
如果查询不到,则默认为不可用,也就是说如果EurekaServer自身不作为客户端注册到上面去,则相邻节点都会显示为不可用。
available-replicas:可用的相邻集群复制节点
===============配置
1、fetch-registry:表示是否从eurekaserver获取注册信息,如果是单一节点,不需要同步其他eurekaserver节点,则可以设置为false,
但此处为集群,应该设置为true,默认为true,可不设置。
2、register-with-eureka:表示是否将自己注册到eurekaserver,因为要构建集群环境,需要将自己注册到及群众,所以应该开启。默认为true,可不显式设置。
3、filterOnlyUpInstances:不过滤服务节点的UP状态,即需要使用所有的服务节点
【Eureka-admin】
https://github.com/SpringCloud/eureka-admin
节点监控、服务动态启停的管理平台
1.x最后一个版本是1.5.7
【ribbon】
ribbon中的负载均衡客户端了LoadBalancerClient,默认会从eruekaclient的服务注册列表中获取服务的信息,并缓存一份(10s获取一次)。
NFLoadBalancerPingInterval
跟具缓存的注册列表信息选择不同的服务实例,也可以禁止从eureka中获取,需要自己维护一份注册列表信息
stores:
ribbon:
listOfServices:serveice1,service2
ribbon:
eureka:
enable:false
【Fegin】
@Configuration
publicclassFeignCofig{
@Bean
publicRetryerfeignRetyryer(){
//默认间隔100毫秒最大重试时间为1秒,重试次数为5
returnnewRetryer.Default(100,SECONDS.toMillis(1),3);
}
}
默认采用httpURconnnection链接
替换为httpclient(feign.httpclient.enable=true默认):
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.2.3</version>
</dependency>
替换为okhttp(feign.okhttp.enable=true默认):
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>10.2.3</version>
</dependency>
网络连接方式
ApacheHttpClient:早就不推荐httpclient,5.0之后干脆废弃,后续会删除。6.0删除了HttpClient
HttpURLConnection:是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。
虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。
从Android4.4开始HttpURLConnection的底层实现采用的是okHttp。
okhttp:是高性能的http库,支持同步、异步,而且实现了spdy、http2、websocket协议,api很简洁易用,和volley一样实现了http协议的缓存。
picasso就是利用okhttp的缓存机制实现其文件缓存,实现的很优雅,很正确,反例就是UIL(universalimageloader),自己做的文件缓存,而且不遵守http缓存机制。
volley:是一个简单的异步http库,仅此而已。缺点是不支持同步,这点会限制开发模式。自带缓存,支持自定义请求。不适合大文件上传和下载。
【zuul】
Zuul可以通过加载动态过滤机制,从而实现以下各项功能:
• 验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。
• 审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。
• 动态路由: 以动态方式根据需要将请求路由至不同后端集群处。
• 压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。
• 负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。
• 静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。
• 多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。
【Sentinel】
Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。
https://github.com/alibaba/Sentinel
#控制台
从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel。用户可以通过如下参数进行配置:
-Dsentinel.dashboard.auth.username=sentinel 用于指定控制台的登录用户名为 sentinel;
-Dsentinel.dashboard.auth.password=123456 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel;
-Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;
使用如下命令启动编译后的控制台:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080
-Dproject.name=sentinel-dashboard
-Dsentinel.dashboard.auth.username=sentinel
-Dsentinel.dashboard.auth.password=123456
-jar D:\\SpringCloud\\v1-jar\\sentinel-dashboard-1.7.1.jar
Dcsp.sentinel.dashboard.server=localhost:8080 向 Sentinel 接入端指定控制台的地址
-Dproject.name=sentinel-dashboard 向 Sentinel 指定应用名称,比如上面对应的应用名称就为 sentinel-dashboard
# 客户端接入
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>x.y.z</version>
</dependency>
启动时加入 JVM 参数 -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制台地址和端口。若启动多个应用,则需要通过 -Dcsp.sentinel.api.port=xxxx 指定客户端监控 API 的端口(默认是 8719)。
从 1.6.3 版本开始,控制台支持网关流控规则管理。您需要在接入端添加 -Dcsp.sentinel.app.type=1 启动参数以将您的服务标记为 API Gateway,在接入控制台时您的服务会自动注册为网关类型,然后您即可在控制台配置网关规则和 API 分组。
除了修改 JVM 参数,也可以通过配置文件取得同样的效果(properties 文件方式(1.7.0 版本开始支持))
#注:1.7.0 以下版本可以通过 ${user_home}/logs/csp/${project.name}.properties 配置文件进行配置(除 project.name 和日志相关配置项)。
# -Dcsp.sentinel.config.file=classpath:sentinel.properties
# 指定应用的名称
project.name=com-spring-cloud-sentinel
#控制台的地址,指定控制台后客户端会自动向该地址发送心跳包。地址格式为:hostIp:port
csp.sentinel.dashboard.server=127.0.0.1:8080
# 本地启动 HTTP API Server 的端口号
# csp.sentinel.api.port 可不提供,默认为 8719,若端口冲突会自动向下探测可用的端口。
# csp.sentinel.api.port=8080
【Hystrix】
【HystrixDashboard】
监控熔断器状况的组件
【HystrixTurbine】
##appConifg配置Euraka中的serviceId列表,表明监控哪些服务
appConfig:service-consume,service-provide
HystrixTurbine将每个服务HystrixDashboard数据进行了整合
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
【Sleuth:日志跟踪】
采用Google的dapper的术语,span:基本工作单元,发送一个远程跳读任务就会产生一个span(64位唯一ID标识)
trace:由一些列sapn组成,呈属性结构
annotation:用于记录一个事件
log4j2配置:[%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}]
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
日志的格式为:[applicationname,traceId,spanId,export]
applicationname—应用的名称,也就是application.properties中的spring.application.name参数配置的属性。
traceId—为一个请求分配的ID号,用来标识一条请求链路。 【可以在zipkin 中根据该ID查询】
spanId—表示一个基本的工作单元,一个请求可以包含多个步骤,每个步骤都拥有自己的spanId。一个请求包含一个TraceId,多个SpanId
export—布尔类型。表示是否要将该信息输出到类似Zipkin这样的聚合器进行收集和展示。
常见的链路追踪组件:Google的dapperTwitter的zipkin阿里的eagleeye(鹰眼)
在网管中(zuul) 可以用过 org.springframework.cloud.sleuth.Tracer;自定义数据
【zipkin】
传输数据的方式有 http or mq
数据是保存在内存中的,一单重启就没有了。也可以保存到mysql、es
# 保存es 后 依赖关系就没有了 (注意版本)
#zipkin:
# storage:
# type: elasticsearch
# StorageComponent: elasticsearch
# elasticsearch:
# cluster: my-application
# max-requests: 30
# index: zipkin
# index-shards: 3
# index-replicas: 1
# hosts: localhost:9201
【配置中心】
请将配置中心的相关配置配置在bootstrap-.yml中,不要配置appliaction-.yml。
因为服务启动时,会从bootstrap中读取配置,然后从远程配置中心读取配置文件,最后再从appliaction中获取配置,如果有相同的配置项,则后面的会覆盖前面读到的值。
Config支持我们使用的请求的参数规则为:
/ { 应用名 } / { 环境名 } [ / { 分支名 } ]
/ { 应用名 } - { 环境名 }.yml
/ { 应用名 } - { 环境名 }.properties
/ { 分支名 } / { 应用名 } - { 环境名 }.yml
/ { 分支名 } / { 应用名 } - { 环境名 }.properties
注意:
第一个规则的分支名是可以省略的,默认是master分支
无论你的配置文件是properties,还是yml,只要是应用名+环境名能匹配到这个配置文件,那么就能取到
如果是想直接定位到没有写环境名的默认配置,那么就可以使用default去匹配没有环境名的配置文件
使用第一个规则会匹配到默认配置
如果直接使用应用名来匹配,会出现404错误,此时可以加上分支名匹配到默认配置文件
如果配置文件的命名很由多个-分隔,此时直接使用这个文件名去匹配的话,会出现直接将内容以源配置文件内容直接返回,内容前可能会有默认配置文件的内容(已测试)
【Spring Cloud Bus】
RabbitMQ、AMQP、Kafka
刷新:http://id:port/bus/refresh
http://id:port/bus/refresh?distination=server-test:** 刷新服务名为server-test的所有服务实例
【SpringSecurity】
CAT 简介 【https://github.com/dianping/cat】
CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。
CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,
为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。
CAT 很大的优势是它是一个实时系统,CAT 大部分系统是分钟级统计,但是从数据生成到服务端处理结束是秒级别,秒级定义是48分钟40秒,基本上看到48分钟38秒数据,整体报表的统计粒度是分钟级;
第二个优势,监控数据是全量统计,客户端预计算;链路数据是采样计算。
【nacos】
参考资料
https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/
http://springboot.fun/
https://springcloud.cc/
官网资料:
https://cloud.spring.io/spring-cloud-static/Edgware.SR5/single/spring-cloud.html
https://docs.spring.io/spring-boot/docs/1.5.8.RELEASE/reference/html/
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wenwang2000/com-spring-cloud-v1.git
[email protected]:wenwang2000/com-spring-cloud-v1.git
wenwang2000
com-spring-cloud-v1
com-spring-cloud-v1
master

搜索帮助