Spring Cloud 笔记
文章平均质量分 82
厕所博士
本着学习的、开源的态度分享、记录一些知识;
展开
-
Spring Cloud 学习笔记 —— Alibaba Sentinel
Sentinel: 分布式系统流量房卫兵Sentinel 是什么?随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Sentinel 具有以下特征:丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可承受的范围)、消息晓峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 同事提供实原创 2020-11-24 11:54:21 · 253 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目
17.2 实践在Spring Cloud 学习笔记 —— Spring Cloud Zipkin 简介和安装的基础上,我们创建一个项目,来在项目中实现 Sleath、Zipkin、RabbitMQ 的链路追踪1.创建一个 Spring Boot 项目 zipkin01,添加 Web、Sleath、Zipkin、RabbitMQ、Stream依赖,Stream 依赖是方便发送到消息队列创建完项目,配置 application.propertiesspring.application.name=z原创 2020-11-19 00:23:28 · 481 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— Spring Cloud Zipkin 简介和安装
17.ZipkinZipkin 是 Twitter 公司开源的分布式追踪系统,有两部分:Zipkin Server 和 Zipkin Client;Zipkin Server 分析展示日志,Zipkin Client 收集不同语言数据日志,上报给 Zipkin Server17.1 准备工作搭建一整套的收集日志和展示日志的功能,除了 Zipkin 收集之外,还要有存储日志的 ElasticSearch 、发送的工具 RabbitMQ 和可视化工具 es-head。(1)es-head 安装方法①原创 2020-11-18 12:50:05 · 227 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Sleath 收集异步任务信息
收集异步任务信息直接上步骤代码:在启动类上加上 @EnableAsyn 注解,开启异步调用@EnableAsync@SpringBootApplicationpublic class Sleath2Application { public static void main(String[] args) { SpringApplication.run(Sleath2Application.class, args); } @Bean RestTem原创 2020-11-15 17:08:26 · 389 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Sleath 简介及 HelloWorld
Spring Cloud Sleath16.1 简介在大规模分布式系统中,一个完整的系统是由很多不同的服务共同支撑的。不同的系统可能分布在上千台服务器上,横跨多个数据中心,一旦系统出现问题,此时定位就比较麻烦,这个时候就需要分布式链路追踪在微服务环境下,中型的互联网公司,一次请求涉及的服务间调用可能由上百次,一旦请求出问题,需要考虑很多东西:如何快速定位问题如何快速确定此次请求,都涉及到哪些服务到底是那个服务出现问题要解决这些问题就涉及到分布式链路追踪分布式链路追踪系统主要用了跟踪服务局调原创 2020-11-13 10:54:29 · 427 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Stream 定时任务(延迟发送)
定时任务定时任务中,每天的固定时间设置可以使用 Quartz 表达式,比如每天凌晨 3 点备份等等,但是一些特殊的定时任务,比如炸弹还有三分钟爆炸,你不知道什么时候触发炸弹的倒计时,有些业务没有固定时间的延迟触发等,可以使用 RabbitMQ 结合 Spring Cloud Stream 来解决。首先需要下载一个 延迟的插件rabbitmq插件rabbitmq-delayed-message-exchange由于我的 RabbitMQ 是 3.8.9 ,所以下载的是 3.8.9由于 do原创 2020-11-08 15:38:12 · 1221 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Stream 消息分区
消息分区通过上一次Spring Cloud 学习笔记 ——Spring Cloud Stream 消息分组,可以使 RabbitMQ 消费者集群中的消息只会被消费一次,如果想相同特征的消息总是被集群中的固定的一个服务消费,该如何配置呢?可以通过消息分区来解决这个问题*注意消息分区要在消息分组的基础之上操作配置 application.properties# 消费者的配置# 开启消息分区,spring.cloud.stream.bindings.javaboy-input.consumer.p原创 2020-11-08 14:10:42 · 485 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Stream 消息分组
消息分组默认情况下,如果消费者是一个集群,此时,一条消息会被多次消费。首先把项目打包,然后分别运行如下命令java -jar stream2-0.0.1-SNAPSHOT.jarjava -jar stream2-0.0.1-SNAPSHOT.jar --server.port=8081通过不同端口,运行两个服务访问其中一个服务的 hello 接口,会给队列中发送 “hello spring cloud stream!” 的消息可以看到两个服务都收到了这条消息,可原创 2020-11-08 13:40:40 · 273 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Stream 自定义消息通道
15.3 自定义消息通道在Spring Cloud 学习笔记 ——Spring Cloud Stream 概念及 HelloWorld中使用了默认的 Sink 通道,也可以自定义消息通道1.创建一个自定义消息通道接口类,起名叫 MyChannelpublic interface MyChannel { String INPUT = "javaboy-input"; String OUTPUT = "javaboy-output"; @Output(OUTPUT) M原创 2020-11-06 09:06:23 · 1213 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Stream 概念及 HelloWorld
15.1 概念消息驱动框架是基于 Spring Boot,支持 RabbitMQ、Kafaka,可以做消息的发布、订阅、分区等Spring Cloud Stream 用来构建消息驱动的微服务,微服务之间的调用,比如用 RestTemplate、OpenFeign 等,这两种实际是基于 Http 调用,除了这种方式,也可以使用消息驱动,给中间件(如 RabbitMQ)发消息,RabbitMQ 收到消息后,然后根据 RabbitMQ 的内容处理消息。Spring Cloud Stream 比较适合耦合度比原创 2020-11-05 21:04:28 · 363 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Bus 逐个刷新Spring Cloud Config
逐个刷新在Spring Cloud Bus 及 自动更新 config client 配置文件功能中,访问 config-server 的 bus-refresh 接口就能刷新各个 config-client 配置文件,看起来没有什么问题,也很方便,但是当我有一万个服务,而只要刷新其中的一些服务的配置文件时,这要配置就有点“费功夫”了,当然通过添加 actuator 依赖,使用 @RefreshScope 注解的内容没有这个问题。但是要在项目中用到配置文件的地方都加上 @RefreshScope 注解。这原创 2020-11-01 09:39:25 · 138 阅读 · 1 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Bus 及 自动更新 config client 配置文件功能
Spring Cloud Bus 通过轻量级的消息代理连接各个微服务,可以用来广播配置文件的更改,或者管理服务监控。安装 RabbitMQdocker run -d --hostname my-rabbit --name javaboy-rabbit -p 15672:15672 5672:5672 rabbitmq:3-management首先给 config-client 和 config-server 加上 Spring Cloud Bus 依赖 <dependency>原创 2020-11-01 00:16:25 · 191 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 请求失败重试
13.6请求失败重试config-client 在调用 config-server 时,一样也可能发生请求失败的问题,这个时候,我们可以配置一个请求重试的功能。要给 config-client 添加重试功能,只需要添加如下依赖即可: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star原创 2020-10-30 23:52:39 · 789 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 动态刷新
13.5 动态刷新在 config server 中的配置文件更改后,默认 config server 可以及时感知到变化,但 config client 不会及时感知到变化,默认情况下,config-client 只有重启才能加载到最新文件,为了解决这个问题,介绍一种使用 spring-boot-start-acuator 解决办法1.在 config client 的 pom.xml 中添加 spring-boot-start-acuator 依赖 <dependency>原创 2020-10-28 20:54:48 · 370 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 服务化
13.4 服务化前面讲到了 Spring Cloud config 的 安全管理,但是例子中 config server 和 config client 都是单体服务,没有放到注册中心去,下面简单演示集成到 Eureka 服务。1.首先启动 Eureka 服务端,然后为了 config server 和 config client 能注册到 Eureka,都在 pom.xml 添加 Eureka Client 依赖 <dependency> <group原创 2020-10-28 19:46:34 · 120 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 安全管理
13.3 安全管理为什么要有安全管理呢,在前面说的对称和非对称中,都可以从地址栏里IP + 端口/{application}/{profile}/{label}中直接访问配置文件,得到明文,这是不安全,怎么能让人这么轻易的访问呢,这时候我们需要一种安全配置,也是非常简单的配置,引入 Spring-Security,Spring Security 是Spring Cloud 或 Spirng Boot 中常用的应用加密,与 Shiro 是相同的功能,下面实验一下项目引入 Spring Security。原创 2020-10-27 20:06:38 · 277 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 配置文件加解密(非对称加密)
13.2.3 非对称加密直接看步骤1.生成非对称加密密钥:在配置了 JDK 和 上节 JCE 的情况下,运行如下命令:C:\Users\Administrator>keytool -genkeypair -alias config-server -keyalg RSA -keystore F:\springcloudStudy\configRepository\config-server.keystore密钥库口令我输入的是六个1:111111;然后其他直接回车,在最后一步填是,结原创 2020-10-27 19:08:57 · 450 阅读 · 1 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 配置文件加解密(对称加密)
13.2 配置文件加解密如果没有加密配置,那么一些只有运维人员能看见的东西,开发人员也可以看见,在网上“删库跑路”的段子,可能就是真的了,所以这时要加密13.2.1 常见加密方案13.2.1.1 不可逆加密不可逆加密,就是理论上无法根据加密后的密文推算出明文。像加密的框架 Shiro(MD5、SHA) 、Spring Security 都是采用这种方式13.2.1.2 可逆加密...原创 2020-10-26 20:47:26 · 585 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 的 Server 的简单配置
Server 的配置1. 使用占位符灵活控制查询目录先来看配置好的 config-server 和 config-client 的配置文件config-sever 的 application.properties 文件spring.application.name=config-serverserver.port=8081# 配置文件仓库地址spring.cloud.config.server.git.search-paths=client1spring.cloud.config.serve原创 2020-10-23 09:50:56 · 316 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 的 Client 端搭建
Config Server一、基本搭建1 .首先创建一个 Spring Boot 项目作为 module ,项目名为config-server依赖需要添加 Web、Config Client 依赖项目创建完成2.项目创建成功后,再 resources 目录添加 bootstraps.properties 资源文件# 下面三行配置分别对应 config-server 中的{application}、{profile}、{label}占位符spring.application.name=c原创 2020-10-22 13:14:01 · 176 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 的 Server 端搭建
Config Server首先创建一个Config Server 工程,添加 Config Server 依赖:添加 Web、Config Server 依赖原创 2020-10-20 20:11:59 · 227 阅读 · 0 评论 -
Spring Cloud 学习笔记 ——Spring Cloud Config 介绍及准备工作
13.1 基本用法分布式配置中心解决方案国内360 QConf淘宝 diamond百度 disconf国外Apache Commonsownercfg4j都不如 Spring Cloud Config,因为可以和 Spring 家族其他组件无缝结合,非常方便13.1.1 简介Spring cloud Config 是一个分布式系统配置管理的解决方案,它包含 Client 和 Server。可以使用 SVN 或者 GIT;这里介绍 GIT,公司可能用 GITLAB;配置文件放在原创 2020-10-19 20:21:02 · 177 阅读 · 1 评论 -
Spring Cloud 学习笔记 —— 服务网关 Gateway 的 Filter
12.4 Gateway 的 Filter1.介绍Gateway 的 Filter 使用位置只有 “pre”、“post” 两种,比 Zuul 简单过滤器分为 GatewayFilter 和 GlobalFilter,GatewayFilter 是单个或一组的过滤器,GlobalFilter 是全局过滤器接下来使用其中的一种,请求参数过滤器,并验证通过 Gateway 端口调用其他微服务请求参数过滤器1.添加 eureka 依赖 <dependency>原创 2020-10-18 12:17:07 · 341 阅读 · 1 评论 -
Spring Cloud 学习笔记 —— 服务网关 Gateway 的 Predicate
12.3 Gateway 的 Predicate4 种匹配规则1. 通过时间匹配(1)配置 yml 文件spring: cloud: gateway: routes: - id: javaboy-route uri: http://httpbin.org predicates: - After=2020-10-01T01:01:01+08:00[Asia/Shanghai]表示在- Aft原创 2020-10-11 11:07:12 · 703 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— 服务网关 Gateway 简介及 HelloWorld 简单使用
12.1 Spring CloudGateway简介Gateway 是基于 Spring 5.0 、Spring boot 2.0 、Project item 来开发的特点:限流路径重写动态路由集成 Spring Cloud DiscoveryClient集成 Hystrix 断路器和 Zuul 对比1.Zuul 是 Netflix 公司的开源产品,Spring Cloud Gateway 是 Spring 家族中产品,可以和 Spring 家族中的其他组件更换的融合2.Zuul1原创 2020-10-11 10:03:33 · 299 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— 服务网关Zuul 的请求过滤及其他配置
11.2.2 请求过滤对于来自客户端的请求,可以在 Zuul 中进行预处理,例如权限判断等,简单演示一个权限判断的例子(1)定义一个过滤器 PermissFilter 继承 ZuulFilter,实现其中的方法,增加 @Component 注解,方法含义,直接看代码:package org.javaboy.zuul;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import原创 2020-10-08 15:53:07 · 237 阅读 · 1 评论 -
Spring Cloud 学习笔记 —— 服务网关 Zuul 的 HelloWorld
11.2 ZuulZuul 是 Netflix 公司提供的网关服务,是前置服务Zuul 的功能:1.权限控制,可以做认证和授权2.监控请求3.动态路由4.负载均衡5.静态资源处理(不需要转发其他服务,直接在 Zuul 处理)Zuul 中的功能基本上基于过滤器(Filter)实现,它的过滤器有几种不同类型:1.pre 校验2.routing 把请求路由到微服务上去3.post 微服务执行完成,进入4.error 过滤器执行报错了,进入11.2.1 Zuul 的 HelloWorl原创 2020-10-08 14:55:47 · 490 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— 服务网关介绍
11.1 服务网关网关两种: Zuul 和 GatewayZuul 是曾经的王者,Gateway 是现在的主流由于每一个微服务地址都有可能发生变化,无法直接对外公布这些服务地址,基于安全和高内聚、低耦合的设计,有必要把内部系统和外部系统做一个切割,一个专门用来处理外部请求的组件,就是服务网关服务网关的作用1.权限问题的统一处理2.数据剪裁和聚合(比如数据从 A 服务和 B 服务两个服务获得,组合起来给前端返回)3.简化客户端调用4.可以针对不同客户端提供不同的网关支持Spring Clo原创 2020-10-08 11:02:48 · 159 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— Micrometer 服务监控
10.4 服务监控微服务架构中由于服务数量众多,故障率比单体大,这种时候不能依赖人肉运维了早期的 Spring Cloud 中,服务监控主要使用 Hystrix Dashboard,集群数据库使用 Turbine,在 Greenwich 中,官方建议使用 MicrometerMicrometer(1)提供了度量指标,例如 timers、counters(2)一揽子开箱即用的方案,例如:缓存、类加载器、垃圾收集等1.新创建一个 Spring Boot 项目 micrometer 作为 javab原创 2020-10-06 13:39:06 · 867 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— Resilience4 微服务中基本用法
10.3 Resilience4j 结合微服务Retry、CircuitBreaker、RateLimiter10.3.1 Retry(1)创建一共 Spring Boot 项目 resilience4j-2,添加 Resilience4j-spring-boot2 依赖,并注册到 Eureka(2)手动添加 Resilience4j 依赖 <dependency> <groupId>io.github.resilience4j<原创 2020-10-05 22:50:32 · 639 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— Resilience4 简介和基本用法
10.1 Resilience4 简介Resilience4j 是 Spring Cloud Greenwich 版推荐的容错解决方案。 可能成为主流的解决方案,因为 Hystrix 的公司 Netflix 不再更新,受 Hystrix 启发设计的 Resilience4j ;相比 Hystrix,Resilience4j 专门为 Java 8 以及函数式编程而设计,更加轻量级,没有任何外部依赖性,除了 resilience4j 自身的依赖,不需要其他依赖Resilience4j 主要提供功能(原创 2020-10-05 19:30:37 · 1088 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— OpenFeign 服务降级 + Hystrix
9.7 OpenFeign 服务降级Hystrix 中的容错、服务降级等功能,在 OpenFeign 中一样要使用(1)我们要把 HelloService 接口服务降级,创建一个类 HelloServiceFallback 并实现方法HelloService@FeignClient(value = "provider")public interface HelloService extends IUserService {}package org.javaboy.openfeign;原创 2020-09-30 14:32:00 · 1781 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— OpenFeign 日志、数据压缩
9.5 OpenFeign 日志在 OpenFeign 中,我们可以通过配置日志来查看整个请求调用过程,日志级别分四种级别作用NONE不开启日志,默认是此配置BASIC记录请求方法、URL、响应状态码、执行时间HEADERS在 BASIC 的基础上,加载请求/响应头FULL在 HEADERS 基础上,在增加 Body 已经请求元数据这四种配置都可以通过 Bean 来配置配置日志 Bean,在启动类中配置 Logger.Level,包是 feign原创 2020-09-30 13:52:12 · 625 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— OpenFeign 继承特性
9.4 OpenFeign 继承特性在参数传递的章节中,我们可以看到 provider 的 HelloController 接口和 openfeign 的 HelloService 接口,两者高度重合,能不能把公用的提取出来呢?答案是可以使用继承特性(1)在 javaboycloud 中新建一个 module,叫 hello-api,要用到 Spring MVC 中的东西,所以要引入 Web 依赖(2)引入合适 Spring MVC 依赖和公用 commons 依赖,commons 中定义了 U原创 2020-09-30 12:36:47 · 853 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— OpenFeign 参数传递
OpenFeign 参数传递OpenFeign 传递参数,一定要绑定参数名,即有参数要加上 @RequestParam 注解,如果通过 Header 来传递参数,一定要中午转码,form 表单提交的 Key/Value 形式也要标记参数的名称,测试 provider 服务中的接口(1)在 provider 服务中定义接口如下:@RestControllerpublic class HelloController{ @Value("${server.port}") Integer原创 2020-09-30 10:52:51 · 9496 阅读 · 1 评论 -
Spring Cloud 学习笔记 —— OpenFeign 简单介绍及 HelloWorld 级别使用
9.1 OpenFeign前面无论时基本调用,还是 Hystrix,都是通过调用 RestTemplate 来实现远程调用的。使用 RestTemplate 有一个问题:繁琐,每个请求除了参数不同、请求地址不同、返回数据不同,其他都是一样的,所以我们希望能够简化,简化的方案就是 OpenFeign。一开始叫 Netflix,但 Netflix 停止开源,OpenFeign 是 Spring cloud 团队在 Netflix Feign 基础上开发出来的声明式调用组件,关于 OpenFeign 组件的原创 2020-09-30 09:19:36 · 210 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— Hystrix 请求合并
Hystrix 请求合并Hystrix 请求合并,是把接口相同、参数不同的请求封装成一个请求,比如 A 、B 、C 三个请求调用一个接口,相隔时间 200 毫秒,那完全可一起发送,提供发送效率(1)请求命令方式先在 provider 中提供一个接口:@RestControllerpublic class UserController { @GetMapping("/user/{ids}") public List<User> getUserByIds(@Path原创 2020-09-28 10:14:52 · 247 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— Hystrix 请求缓存
1.Hystrix 请求缓存Hystrix 请求缓存是在 HystrixRequestContext的initializeContext()方法和close()方法之间的内容,如果请求的接口、和参数一样,那么请求只访问一次,之后的数据,从缓存中获取,注意是在initializeContext()方法和close()方法之间的内容(1)注解方式创建 HelloService 类@Servicepublic class HelloService { @Autowired Res原创 2020-09-27 19:10:24 · 333 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— Hystrix异常处理
Hystrix异常处理我们知道 hystrix 可以在服务接口调不同、或者请求超时时,降级处理。但是如果请求的接口没有错,而是本身代码问题抛出异常改怎么处理呢?,其实在之前的 @HystrixCommand 注解方式和 getFallback 请求命令方式都能处理,但还有一些扩展方式,比如我想知道本地报的什么错1请求命令方式package org.javaboy.hystrix;import com.netflix.hystrix.HystrixCommand;import org.sprin原创 2020-09-27 17:30:55 · 770 阅读 · 0 评论 -
Spring Cloud 学习笔记 —— Hystrix 简单使用,请求命令模式(继承方式)
8.3 请求命令请求命令模式也是服务降级的一种,是 @HystrixCommand 注解的代码形式,与 @HystrixCommand 注解的作用、用处一样,请求命令模式主要是以继承的方式创建一个请求命令类,继承自HystrixCommand<String>,注意泛型要与接口的返回类型一致, run 方法是请求实际执行内容,getFallback 方法是请求出现错误的情况下,回调的方法import com.netflix.hystrix.HystrixCommand;import o原创 2020-09-27 16:58:53 · 293 阅读 · 0 评论