自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Nacos学习(一) —— Nacos配置管理实战

Nacos简介 Nacos是阿里巴巴集团开发的一款开源平台,用于配置/服务发现/服务管理,Nacos可以帮助我们很容易的构建云本机应用程序和微服务架构。Nacos基本上支持现在所有类型的服务,比如说GRPC/Dubbo服务/SpringCloud Restful服务/Kubernetes服务。 作...

2020-07-02 11:01:27 14 0

原创 Sentinel学习(八) —— 规则持久化

规则持久化分成两种方式:拉模式和推模式。 拉模式 原理简述 FileRefreshableDataSource 定时从指定文件中读取规则JSON文件【图中的本地文件】,如果发现文件发生变化,就更新规则缓存。 FileWritableDataSource 接收控制台规则推送,并根据配置,修改规...

2020-06-29 11:48:30 21 0

原创 JWT

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源...

2020-06-23 10:37:09 17 0

转载 Sentinel学习(六) —— 控制台和客户端通信原理

控制台 控制台主要的处理类是 FlowControllerV1 。 @RestController @RequestMapping(value = "/v1/flow") public class FlowControllerV1 { private final Lo...

2020-06-12 18:45:59 71 0

转载 Sentinel学习(四) —— 滑动窗口

化整为零 我们已经知道了Slot是从第一个往后一直传递到最后一个的,且当信息传递到StatisticSlot时,这里就开始进行统计了,统计的结果又会被后续的Slot所采用,作为规则校验的依据。我们先来看一段非常熟悉的代码,就是StatisticSlot中的entry方法: @Override pu...

2020-06-11 11:53:29 30 0

转载 Sentinel学习(三) —— 限流原理分析

项目结构 将Sentinel的源码fork到自己的github库中,接着把源码clone到本地,然后开始源码阅读之旅吧。 首先我们看一下Sentinel项目的整个结构: sentinel-core 核心模块,限流、降级、系统保护等都在这里实现 sentinel-dashboard 控制台模块,...

2020-06-11 11:08:56 38 0

原创 Apollo —— OpenAPI调用

引入依赖 需要引入两个依赖 1、集成apollo的依赖。2、调用apollo修改数据的openAPI的依赖。 <!-- https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-client --...

2020-06-01 18:25:31 115 0

原创 Sentinel学习(七) —— API、注解、整合Feign

Sentinel API 这里介绍三个重要的API。 ContextUtil Tracer SphU @GetMapping("/test-sentinel-api") public String testSentinelApi(@RequestParam(...

2020-05-27 18:13:39 27 0

原创 Sentinel学习(五) —— 控制台使用和源码

通过 sentinel 的控制台,我们可以对规则进行查询和修改,也可以查看到实时监控,机器列表等信息,所以我们需要对 sentinel 的控制台做个完整的了解。 启动控制台 从github上下载源码后,启动sentinel-dashboard模块。默认地址是8080。用户名和密码配置到了appli...

2020-05-26 15:26:08 33 0

转载 Sentinel学习(二) —— 重要概念

Sentinel 中有很多比较重要的概念,我们要了解一个框架,首先要对框架中重要的概念实体进行分析,本文我将跟大家一起来分析一下 Sentinel 中非常重要的几个概念。 Resource Resource 是 Sentinel 中最重要的一个概念, Sentinel 通过资源来保护具体的业务代码...

2020-05-26 10:59:39 35 0

转载 Sentinel学习(一) —— 快速实现限流

Sentinel简介 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景: Sentinel 承接了阿里巴巴近 10...

2020-05-25 17:11:57 39 0

原创 Spring StateMachine学习(五) —— 持久化

实际的企业应用中状态机的流程会更加复杂,而我们最常用到的就是choice。它类似于java的if语句,作为条件判断的分支而存在,让我们先看一张图: 这张图表现的是一个表单(form)的整个状态流程: 创建初始的空白表单( BLANK_FORM) 填写(WRITE)表单,成为填充完表单(FULL...

2020-04-16 23:27:00 74 0

原创 Spring StateMachine学习(四) —— 持久化

在实际业务中,状态机可能需要在某个环节停留,等待其他业务的触发,然后再继续下面的流程。比如订单,可能在支付环节需要等待一个剁手的用户隔天再下单,所以这里面涉及到一个创建的状态机该何去何从的问题。在spring statemachine中,给出来的办法就是保存起来,到需要的时候取出来用。 持久化到本...

2020-04-16 22:34:21 121 0

原创 Spring StateMachine学习(三) —— 传递参数

在企业开发中,数据在不同的业务间传输是最常见的工作,所以虽然我们的主架构是用的状态机,也就是从流程状态的角度来看待这个项目,但在具体业务中,每个状态的转变中会牵涉到各类业务,这些业务有些需要收到状态机变化的通知,需要把状态值传递给业务类和业务方法,同样的,在处理状态变化是,也需要获取业务数据,方便...

2020-04-15 02:13:02 86 0

原创 Spring StateMachine学习(二) —— 多个状态机

在实际的企业应用中,基本不可能只有一个状态机流程在跑,比如订单,肯定是很多个订单在运行,每个订单都有自己的订单状态机流程。我们就需要在每次使用时创建一个新的状态机。 创建多个状态机 通过 RefundReasonMachineBuilder 创建多个状态机。 @Slf4j @Component ...

2020-04-15 01:53:58 92 0

原创 Spring StateMachine学习(一) ——快速开始

有限状态机(Finite-state machine) 有限状态机(英语:finite-state machine,缩写:FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。应用FSM模型可以帮助对象生命周期的状态的顺序以及导致状态变化的事件进行管理。将状态和事件...

2020-04-14 03:50:59 90 0

原创 MyBatis Plus主键设置策略

主键策略的几种类型 public enum IdType { /** * 数据库ID自增 */ AUTO(0), /** * 该类型为未设置主键类型 */ NONE(1), /** * 用户输入ID ...

2020-04-10 16:52:32 34 0

原创 Mybatis分页插件——PageHelper使用

Spring boot 整合 PageHelper 本文介绍了如何再使用PageHelper和PageHelper的原理。通过学习PageHelper的源码来实现我们自己的Mybatis的插件。 pom.xml 引入mybatis、druid和PageHelper &lt;...

2020-04-09 02:15:02 40 0

转载 Guava学习(四)-重试

重试的使用场景 在很多业务场景中,为了排除系统中的各种不稳定因素,以及逻辑上的错误,并最大概率保证获得预期的结果,重试机制都是必不可少的。 尤其是调用远程服务,在高并发场景下,很可能因为服务器响应延迟或者网络原因,造成我们得不到想要的结果,或者根本得不到响应。这个时候,一个优雅的重试调用机制,可以...

2020-04-09 02:01:28 17 0

原创 RabbitMQ面试题

如何确保消息正确地发送至RabbitMQ? RabbitMQ使用发送方确认模式,确保消息正确地发送到RabbitMQ。 发送方确认模式:将信道设置成confirm模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的ID。一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消...

2020-03-20 00:07:39 23 0

原创 RabbitMQ 学习(六) —— RabbitMQ组件设置

MQ组件实现的功能性点: 支持消息高性能的序列化转换、异步化发送消息。 支持消息生产实例与消费实例的链接池化缓存化,提升性能。 支持可靠性投递消息,保障消息100%不丢失。 支持消费端的幂等操作,避免消费端重复消费的问题。 支持迅速消息发送模式,在一些日志收集/统计分析等需求下可以保证高性能,超...

2020-03-19 16:58:47 24 0

原创 RabbitMQ 学习(五) —— RabbitMQ集群

镜像模式 镜像模式:集群模式非常经典的就是Mirror镜像模式,保证100%数据不丢失,在实际工作中也是用的最多的。 Mirror镜像队列,目的是为了保证rabbitmq数据的高可靠性解决方案,主要是为了实现数据的同步。一般来讲是2-3个节点实现数据同步。(对于100%数据可靠性解决方案一般是3节...

2020-03-19 11:50:36 36 0

原创 RabbitMQ 学习(四) —— RabbitMQ延迟消息

使用RabbitMQ实现延迟队列的两种方式 TTL + DLX DLX(Dead-Letter-Exchange),当信息在一个队列变成死信(Dead message)后,能被重新发送到DLX中,绑定DLX的队列称之为死信队列。死信队列可以通过检测被拒绝或者未送达的消息来追踪问题。 设置延迟队...

2020-03-18 23:31:09 29 0

原创 RabbitMQ 学习(三) —— rabbitmq整合spring、springboot、springcloudstream

RabbitMQ整合Spring AMQP实战 RabbitAdmin RabbitAdmin类可以很好的操作RabbitMQ,在Spring中直接进行注入即可。(注意:autoStartup必须要设置为true,否则Spring容器不会加载RabbitAdmin类) RabbitAdmin底层实...

2020-03-17 21:03:13 44 0

原创 RabbitMQ 学习(二) —— 可靠性投递

生产端可靠性投递 保证生产端可靠性投递需要以下几步: 1、保障消息端成功发出。 2、保障MQ节点的成功接收。 3、发送端收到MQ节点(Broker)确认应答。 4、完善端消息进行补偿机制。 方案一: 1、对业务数据和消息数据进行落库。 2、发送消息并监听回调,如果收到ACK,更数据库消息状态。...

2020-03-12 19:48:17 34 0

原创 RabbitMQ 学习(一) —— 概念和快速入门

RabbitMQ 初识 RabbitMQ 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ 是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。 Erlang语言最初在于交换机领域的架构模式,这样使得 RabbitMQ在Brok...

2020-03-07 12:34:33 49 0

原创 Spring Cloud学习——链路追踪:Zipkin

安装Zipkin Server docker run -d -p 9411:9411 openzipkin/zipkin 运行后访问http://localhost:9411/zipkin/ 配置服务 文基于之前的zuul模块,以及eureka-client模块。在两模块中都添加zipkin的...

2020-01-23 20:42:22 75 0

原创 Spring Cloud学习——链路追踪:Sleuth

为什么需要Spring Cloud Sleuth 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以...

2020-01-23 20:27:28 111 0

转载 Spring Cloud学习——网关:Zuul

什么是Zuul Zuul 是 Netflix 开源的微服务网关组件,它可以和 Eureka、Ribbon、Hystrix 等组件配合使用。Zuul 的核心是一系列的过滤器 (比如:动态路由)。Spring Cloud Zuul 对 Zuul 进行了整合 ,从而更方便的与 Spring Cloud...

2020-01-14 10:07:38 90 0

转载 Spring Cloud学习——服务间通信:Feign

Feign 有两个特点:1、声明式REST客户端(伪RPC)2、采用了基于接口的注解 如何使用 在Spring cloud应用中,当我们要使用feign客户端时,一般要做以下三件事情 : 使用注解@EnableFeignClients启用feign客户端并设置扫描的路径。 @SpringBo...

2020-01-07 12:37:53 54 0

转载 Spring 注解详解 —— @Transactional

@Transactional 首先从 <tx:annotation-driven/> 说起。配置了 <tx:annotation-driven/>,就必定有对应的标签解析器类,查看NamespaceHandler接口的实现类,可以看到一个TxNamespaceHandler...

2020-01-06 18:43:43 29 0

转载 Spring 的 Bean 的加载过程

概述 首先,概括的描述一下 Spring 背后的操作: 通过注解和xml的方式,将定义的bean(如 loginService 和 loginResource) 解析成 Spring 内部的 BeanDefinition。 以 beanName(如 loginService) 为 key,Bea...

2020-01-06 16:27:51 25 0

原创 JVM性能监控与调优学习

JVM命令参数 标准参数 在jvm的各个版本中不会变的参数,例如:-help、-server -client、-version -showversion、-cp -classpath。 X参数 非标准化参数,jvm的不同版本可能改动:-Xint(解释执行)、-Xcomp(第一次使用就编译成本地代...

2019-12-21 17:07:02 41 0

原创 自定义参数解析器——HandlerMethodArgumentResolver

场景 每个接口在被调用时,很可能需要调用该接口的用户信息,每次再去数据库查询该数据信息,势必会造成代码的大量重复,且还容易出错。 应用:把该次调用者用户的信息当做参数传到对应的方法。 比如:根据token获得到用户信息,将用户信息传到对应请求的method。 实现自定义参数解析器步骤:1、自定...

2019-12-05 17:50:37 19 0

原创 java基础——Lambda表达式

什么是Lambda Lambda表达式也被称为箭头函数、匿名函数、闭包。 Lambda表达式体现的是轻量级函数式编程思想。 ‘->’ 符号式Lambda表达式核心操作符号,符号左侧是操作参数,符号右侧是操作表达式。 JDK8 新特性。 我们来看一个Lambda的例子: /...

2019-11-28 20:32:51 34 0

原创 Zookepper入门

Zookepper介绍 官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 配置管理: 我们可以将集群中的信息统一配置...

2019-11-26 21:42:04 45 0

原创 RocketMQ学习(二)——重要参数和主从消息同步

生产者核心参数 producerGroup: 组名。一个应用(JVM)中组名不能重复。 defaultTopicQueueNums: 默认的topic对于Queue的数量,默认是4。 sendMsgTimeout: 生产者发送消息的超时时间。 compressMsgBodyOverHowmuch:...

2019-10-18 18:07:57 82 0

原创 Kafka学习(四)——生产者

日志存储 Kafka 中的消息是以主题为基本单位进行归类的,各个主题在逻辑上相互独立。每个主题又可以分为一个或多个分区,分区的数量可以在主题创建的时候指定,也可以在之后修改。每条消息在发送的时候会根据分区规则被追加到指定的分区中,分区中的每条消息都会被分配一个唯一的序列号,也就是通常所说的偏移量(...

2019-10-16 16:13:24 47 0

原创 Kafka学习(三)——消费者

消费者与消费组 与生产者对应的是消费者,应用程序可以通过 KafkaConsumer 来订阅主题,并从订阅的主题中拉取消息。不过在使用 KafkaConsumer 消费消息之前需要先了解消费者和消费组的概念,否则无法理解如何使用 KafkaConsumer。本章首先讲解消费者与消费组之间的关系,...

2019-10-09 19:21:19 48 0

原创 Kafka学习(二)——生产者

从编程的角度而言,生产者就是负责向 Kafka 发送消息的应用程序。在 Kafka 的历史变迁中,一共有两个大版本的生产者客户端:第一个是于 Kafka 开源之初使用 Scala 语言编写的客户端,我们可以称之为旧生产者客户端(Old Producer)或 Scala 版生产者客户端;第二个是从 ...

2019-10-09 10:57:29 56 0

提示
确定要删除当前文章?
取消 删除