Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Alibaba的笔记. 1.在整合Spring Cloud Alibaba之前,首先需要整合Spring Cloud 在Spring Cloud的官网可以了解到目前最新的稳定版Spring Cloud版本,我所选择版本是Greenwich.SR3.在项目的pom.xml文件中加入以下代码段就可以整合Sp…
Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式. Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全.监控.埋点和…
引自B站楠哥:https://space.bilibili.com/434617924 一.创建父工程 创建父工程hello-spring-cloud-alibaba Spring Cloud Alibaba 的环境在父工程中创建,微服务的各个组件作为子工程,继承父工程的环境. Spring Boot --->Spring Cloud --->Spring Cloud Alibaba 引入依赖时注意提前查询一下spring cloud的版本依赖关系. pom文件为,父工程打包时应打成pom,否…
1.手写一个客户端负载均衡器 在了解什么是Ribbon之前,首先通过代码的方式手写一个负载均衡器 RestTemplate restTemplate = new RestTemplate(); // 获取请求示例 List<ServiceInstance> instances = discoveryClient.getInstances("study02"); List<String> collect = instances.stream() .map(inst…
目前业界流行的统一配置管理中心组件有Spring Cloud Config.Spring Cloud Alibaba的Nacos及携程开源的Apollo,本文将介绍Nacos作为统一配置管理中心的使用. 使用Nacos管理配置 比如我现在有这样一段代码: @Value("${your.configuration}") private String yourConfiguration; @GetMapping("/test_configuration") public…
1.什么是Nacos Nacos的官网对这一问题进行了详细的介绍,通俗的来说: Nacos是一个服务发现组件,同时也是一个配置服务器,它解决了两个问题: 1.服务A如何发现服务B 2.管理微服务的配置 2.搭建Nacos Server 2.1  环境准备 Nacos依靠java环境运行,搭建Nacos Server,需要配置maven环境,版本环境要求如下: 1.64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac 2.64 bit JD…
Sentinel 控制台 需要具备下面几个特性: 规则管理及推送,集中管理和推送规则.sentinel-core 提供 API 和扩展接口来接收信息.开发者需要根据自己的环境,选取一个可靠的推送规则方式:同时,规则最好在控制台中集中管理. 监控,支持可靠.快速的实时监控和历史监控数据查询.sentinel-core 记录秒级的资源运行情况,并且提供 API 来拉取资源运行信息.当机器大于一台以上的时候,可以通过 Dashboard 来拉取,聚合,并且存储这些信息.这个时候,Dashboard 需…
整合Sentinel 应用整合Sentinel 在dependencies中添加依赖,即可整合Sentinel <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> 搭建Sentinel控制台 可以从这个地址:https://github…
参考:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.1.0.RELEASE/single/spring-cloud-gateway.html#_gatewayfilter_factories AddRequestHeader GatewayFilter Factory 为原始请求添加Header,配置示例:为原始请求添加名为 X-Request-Foo ,值为 Bar 的请求头 spring: cloud:…
随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求陷入性能瓶颈或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位服务故障点,以对症下药.于是就有了分布式系统调用跟踪的诞生. Spring Cloud Sleuth 也为我们提供了一套完整的解决方案.在本文中,我们将详细介绍如何使用 Spring Cloud Sleuth + Zipkin 来为我们的微服务架构增加分布式服务跟踪的能力. Spring C…
发送消息 在Spring消息编程模型下,使用RocketMQ收发消息 一文中,发送消息使用的是RocketMQTemplate类. 在集成了Spring Cloud Stream之后,我们可以使用Source实现消息的发送,代码如下 private final Source source; ...... source.output().send( MessageBuilder .withPayload(Demo.builder().demoId(1).remark("哈哈哈").bui…
什么是Spring Cloud Stream 一个用于构建消息驱动的微服务的框架 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互,通过我们配置来 binding ,而 Spring Cloud Stream 的 binder 负责与中间件交互.所以,我们只需要搞清楚如何与 Spring Cloud Stream 交互就可以方便使用消息驱动的方式 Spring Cloud Stream编程模型 Destination Binde…
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的全局过滤器,本文介绍如何自定义全局过滤器. 自定义全局过滤需要实现GlobalFilter 接口,该接口和 GatewayFilter 有一样的方法定义,只不过 GlobalFilter 的实例会作用于所有的路由. 自定义全局过滤器 import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filter.GatewayFilterC…
参考:https://cloud.spring.io/spring-cloud-static/Greenwich.SR2/single/spring-cloud.html#_global_filters 全局过滤器 作用 Combined Global Filter and GatewayFilter Ordering 对过滤器执行顺序进行排序 Forward Routing Filter 用于本地forward,也就是将请求在Gateway服务内进行转发,而不是转发到下游服务 LoadBala…
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的内置过滤器工厂,若Spring Cloud Gateway内置的过滤器工厂无法满足我们的业务需求,那么此时就需要自定义自己的过滤器工厂以实现特定功能.所谓过滤器工厂实际上就是用于创建过滤器实例的,而创建的过滤器实例都实现于GatewayFilter接口. 过滤器生命周期 Gateway以转发请求为边界,分为两个生命周期 pre:Gateway转发请求之前 post:Gateway转发请求之后 自定义过滤器工厂 继承Abst…
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的路由谓词工厂,但是如果这些内置的路由谓词工厂不能满足业务需求的话,我们可以自定义路由谓词工厂来实现特定的需求. 例如有某个服务限制用户只允许在06:00 - 13:00这个时间段内才可以访问,内置的路由谓词工厂是无法满足这个需求的,所以此时我们就需要自定义能够实现该需求的路由谓词工厂. 首先定义一个配置类,用于承载时间段的配置参数: package com.example.gateway; import lombok.Da…
Spring Cloud Gateway路由配置的两种形式 Spring Cloud Gateway的路由配置有两种形式,分别是路由到指定的URL以及路由到指定的微服务,在上文博客的示例中我们就已经使用过路由到微服务的这种配置形式了.在这两种形式中,均支持访问路径的通配及精确匹配,在之前的示例中我们只使用了通配.所以本文将给出具体的配置示例,以此直观的了解这两种形式及不同匹配方式在配置上的区别. 路由配置必须与predicates配套使用才会生效! 路由到指定的URL 通配 使用通配符/**进行…
Spring Cloud Stream监控 Spring Boot Actuator组件用于暴露监控端点,很多监控工具都需要依赖该组件的监控端点实现监控.而项目集成了Stream及Actuator后也会暴露相应的监控端点. 首先需要在项目里集成Actuator,添加依赖如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-act…
什么是Feign Feign是一个声明式Web Service客户端. 使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解.Feign也支持可拔插式的编码器和解码器. Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters.Feign可以与Eureka和Ribbon组合使用以支持负载均衡. Feign的组成 接口 作用 默认值 F…
使用Sentinel API Sentinel主要有三个核心Api: SphU:定义资源,让资源收到监控,保护资源 SphU 包含了 try-catch 风格的 API.用这种方式,当资源发生了限流之后会抛出 BlockException.这个时候可以捕捉异常,进行限流之后的逻辑处理. String resourceName = "test_sentinel_api"; Entry test_sentinel_api = null; // 定义一个Sentinel保护的资源 try {…
我们都知道,Spring Boot Actuator 提供监控数据是Json数据,在某种程度来说并不利于分析查看,那么如何将其进行可视化呢?我们有很多种选择,但是目前在这个领域,最流行的是Spring Boot Admin. Spring Boot Admin是为Spring Boot量身打造的一款简单易用的监控数据管理工具. 下面我们就用Spring Boot Admin来实现pring Boot Actuator 监控数据的可视化: 添加依赖 在dependencyManagement中添加…
在Spring中,我们要实现事务,一般通过@Transactional注解实现.这在引入RocketMQ之前没有问题,但是在引入了RocketMQ之后,如果消息发送之后的业务逻辑处理发生了异常的话,这时候消息已经发送出去了,就会导致业务的问题. 为了解决这一问题,RocketMQ引入了Transactional Message[事务消息]. 生产者向MQServer发送半消息[半消息:会存储进MQ Server,但是被标记为不能投递状态] 发送半消息成功,生产者实行本地事务 根据本地事务结果向M…
编写生产者 集成 添加依赖 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.0.3</version> </dependency> PS:由于默认引入的rocketmq-spring-boot-starter版本为2.0.2,r…
搭建RocketMQ 系统环境准备 64位操作系统,推荐使用Linux.Unix.MacOS 64位 JDK1.8+ Maven 3.2.x 适用于Broker服务器的4g +可用磁盘 下载与搭建 下载 从Apache RocketMQ的官网[http://rocketmq.apache.org/ ]可以进入RocketMQ的下载地址,目前最新的版本为4.5.2[http://rocketmq.apache.org/release_notes/release-notes-4.5.2/ ],下载B…
Topic 一类消息的集合,RocketMQ的基本订阅单位 部署结构 Name Server Name Server 为 producer 和 consumer 提供路由信息. 相对来说,nameserver的稳定性非常高.原因有二: nameserver互相独立,彼此没有通信关系,单台nameserver挂掉,不影响其他nameserver,即使全部挂掉,也不影响业务系统使用.无状态 nameserver不会有频繁的读写,所以性能开销非常小,稳定性很高. Broker Server 代理服务器…
绪论 前几天我用一种方式实现了spring cloud的高可用,达到两个注册中心,详情见spring cloud(学习笔记)高可用注册中心(Eureka)的实现(一),今天我意外发现,注册中心可以无限的增加,并这种方法也比较简洁,这里分享给大家 spring cloud 高可用注册中心(Eureka)(三个注册中心)的实现 1.创建工程,这里只需要两个工程,一个注册中心一个测试客户端,不知道怎么创建的可以看spring cloud(学习笔记)高可用注册中心(Eureka)的实现(一) 2.在工程…
本项目演示如何使用 Sentinel 完成 Spring Cloud 应用的熔断降级调用. Sentinel 是阿里巴巴开源的分布式系统的流量防卫组件,Sentinel 把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性. OpenFeign是一款声明式.模板化的HTTP客户端, Feign可以帮助我们更快捷.优雅地调用HTTP API,需要了解OpenFeign使用基础,可以参考cloud-feign示例源码. 本项目服务注册中心使用nacos,服务提供者使用Spr…
上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则.Apollo是国内用户非常多的配置中心,所以,今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储在Apollo中. 使用Apollo存储限流规则 Sentinel自身就支持了多种不同的数据源来持久化规则配置,目前包括以下几种方式: 文件配置 Nacos配置 ZooKeeper配置 Apollo配置 本文我们就来一起动手尝试一下,如何使用Apollo来存储限流规则. 准备工作 下面我们将同时使用…
通过上一篇<使用Sentinel实现接口限流>的介绍,相信大家对Sentinel已经有了初步的认识.在Spring Cloud Alibaba的整合封装之下,接口限流这件事情可以非常轻易的整合到我们的Spring Cloud应用中.但是,通过上篇的整合,依然还不能完美的满足我们日常的生产需求.其中,非常重要的一点就是限流规则的持久化问题.不少细心的读者也在留言中提出了Dashboard中设置的限流规则在应用重启之后就丢失了的问题.那么,接下来我们就来说说Sentinel的规则持久化如何实现.…
上一篇我们介绍了如何通过改造Sentinel Dashboard来实现修改规则之后自动同步到Apollo.下面通过这篇,详细介绍当使用Nacos作为配置中心之后,如何实现Sentinel Dashboard中修改规则同步到Nacos.关于下面改造的原理和分析可以见上一篇<Sentinel Dashboard中修改规则同步到Apollo>的头两节内容,这里不重复介绍了. 代码实现 下面直接来看看如何实现的具体改造步骤,这里参考了Sentinel Dashboard源码中关于Nacos实现的测试用…