- 博客(29)
- 收藏
- 关注
原创 注册中心ZooKeeper、Eureka、Consul 、Nacos对比
一、前言在微服务的架构中自然少不了注册中心,刚好最近公司新项目架构中在注册中心的选型也进行了激烈的研讨,所以写一篇关于它们之间差异,以便我们日后选择注册中心时有个参考。目前市面上主流的注册中心有ZooKeeper、Eureka、Consul 、Nacos等,所以本文简单讲解各注册中心的差异对比。注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。也就是我们常说的服务注册与发现二、CAP
2020-08-20 18:33:27 858
原创 Docker 搭建私有镜像仓库Registry
一、前言在日常开发过程中,我们开发的docker镜像不需要公开放到dockerhub中,只想内部共享docker镜像,这时我们就需要搭建自己本地的镜像仓库,以便内容人员的使用。本文主要讲解如何通过本地构建镜像上传到服务器的镜像仓库中。二、Registry镜像的部署拉取registry镜像docker pull registry (默认版本:latest )运行registry镜像docker run -d -p 5000:5000 --restart=always --name regi
2020-08-17 16:56:26 555
原创 Spring Cloud Gateway 自定义异常处理
一、背景平时我们在Spring MVC层面做自定义异常出处理都是通过@ControllerAdvice和@ExceptionHandler自定义不同类型异常的处理逻辑,如图以上只是简单的同一处理异常,具体实现方式可根据项目自定义处理,这里就不展开细说。不过本文的重点是在网关层自定义异常,因为请求通过网关再到服务,中间难免会有未处理好的异常抛出,加上网关还有限流,熔断等功能,难免有异常抛出,这个时候我们就需要对这些异常做个处理,Spring Cloud Gateway默认的异常处理重点是在Defau
2020-06-11 16:46:30 7569 2
原创 Spring Cloud Gateway 网关限流
一、背景在日常高并发系统中为了防止大量请求使服务器崩盘,导致服务不可用,往往需要对系统做限流,限流的方式有很多种,本文主要简单讲解基于Spring Cloud Gateway网关层实现限流。Spring Cloud Gatewa实现限流是基于Redis的令牌桶算法,所谓令牌桶算法就是存在一个桶,用来存放固定数量的令牌,以一定的速率往桶中放令牌,每次请求调用需要先获取令牌,只有拿到令牌,才有机会继续执行,否则选择选择等待可用的令牌、或者直接拒绝。(这里暂时不详细讲解令牌桶算法,有兴趣的朋友可自行学习)通
2020-06-10 17:59:26 457
原创 Dubbo @Reference retries=0 不生效
一、背景在使用dubbo服务中避免不了重试机制,平时新增、更新操作通常都会设置dubbo服务只调用一次,不然服务就需要做幂等,因为dubbo重试次数默认是2次,所以服务只调用一次需要设置retries =0,今天就来简单讲解下@Reference retries=0 这 一个小坑。二、代码讲解本文讲解的是Springboot集成Alibaba Dubbo版本<dependency> <groupId>com.alibaba.boot</groupId&g
2020-05-16 18:46:28 6713 1
原创 Java8 Stream简单讲解
在日常开发过程中相信大家常用Stream操作集合数据,所以本文主要讲解日常使用Stream的方法操作,便于大家也便于自己学习之用。本文不深入讲解Stream原理,有兴趣的朋友可自行查找相关资料学习。一、什么是StreamStream是Java8提供了一种高效且易于使用的处理数据的方式,类似于数据库查询语句,将集合数据看做一种流,可对于流的节点进行筛选, 排序,聚合等处理。二、Stream和Collections的区别没有存储空间。流不是存储元素的数据结构。相反,它通过一系列计算操作从数据结构,数组
2020-05-14 16:26:14 360
原创 Java 异常java.lang.IllegalArgumentException: Illegal group reference: group index is missing
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!一、背景想必大家在日常项目中对于字符串替换比较常用的方法都是用String类中的replace、replaceAll、replaceFirst等方法,本博主今天刚好遇到这些方法中一个小小的坑,因为平时不太注意,所以今天刚好踩雷了,所以撰写本文以做学习记录之用。二、示例代码以上示例代码输出结果调用 replace、replac...
2020-05-06 16:53:01 7804
原创 Dubbo服务引发捕获不到自定义异常的问题
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!一、问题Dubbo服务调用过程中抛出的自定义异常捕获不到,总是抛出了一个RuntimeException包装了自定义异常,catch自定义异常捕获不到。二、代码模块以下是代码示例,略有简单,敬请谅解!项目目录说明:这里目录只是个示例,只是为了达到效果1、自定义异常和provider在springboot-rocketm...
2020-03-25 10:56:21 1912 1
原创 Jedis基于Redis实现分布式锁
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!一、背景之前写过《JedisLock基于Redis实现分布式锁》的文章,从它的实现逻辑中你会发现存在一些问题(具体问题可以跳转过去看,故这里不作详细说明),所以本文基于Redis的官方文档的实现逻辑实现分布式锁。二、实现分布式锁的原理1、实现思想:(1)获取锁的时候,使用Set命令加锁,这个命令仅在不存在key的时候才能被执行成...
2019-08-06 17:41:30 2014
原创 浅谈消息队列的高可用性
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!一、RabbitMQ的高可用性RabbitMQ是基于主从模式实现高可用,有三种模式:单机模式、普通集群模式,镜像集群模式。单机模式普通单机模式 ,一般本地demo用,没有特别之处。普通集群模式普通集群模式意思就是多台服务器启动多个RabbitMQ实例,一个服务器一个实例。创建的queue只会放到一个RabbitMQ实例...
2019-06-25 18:49:15 582
转载 不可不说的Java“锁”事
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!偶然的机会翻到美图技术团队的一篇关于Java锁的文章,里面十分详细的介绍了Java的各种锁,故此转载该文章以供学习,博客地址:https://tech.meituan.com/2018/11/15/java-lock.html。前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相...
2019-06-10 18:10:22 145
原创 Redlock实现Redis分布式锁
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!之前写过《基于JedisLock实现Redis分布式锁》的文章,里面提到思路是通过setNx命令实现分布式锁的处理。事实上这类琐最大的缺点就是它加锁时只作用在一个Redis节点上,即使Redis通过sentinel保证高可用,如果这个master节点由于某些原因发生了主从切换,那么就会出现锁丢失的情况:在Redis的Master节点...
2019-06-10 15:22:12 1555
原创 SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!在日常的开发过程中难免会有批量操作的功能,Mybatis集成Druid批量更新时经常会出现Error updating database. Cause: java.sql.SQLException: sql injection violation, multi-statement not allow 异常。导致该异常出现是因为Dru...
2019-05-11 15:15:22 4043
原创 RabbitMQ 、Kafka 消息丢失问题
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!平时使用消息队列的时候难免会出现消息丢失的情况,而消息丢失的情况有好几种,数据的丢失问题,可能出现在生产者、MQ、消费者中,所以具体情况具体分析,故本文从 RabbitMQ 和 Kafka 分别来分析。一、RabbitMQ1、生产者丢失数据生产者将数据发送到RabbitMQ的时候,可能发送到一半数据就丢失了,可能网络,也可能有其他...
2019-04-20 15:36:34 917
原创 Java常用的线程池
java常用的线程池注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!1、newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。这种类型的线程池特点是:工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。如果长时间没有往...
2019-04-18 14:46:46 126
原创 Dubbo的集群容错策略以及协议
一、Dubbo的集群容错策略注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!Dubbo提供的集群容错模式:Dubbo提供了多种容错方案,缺省模式为failover,也就是失败重试Failover Cluster:失败重试当服务消费方调用服务提供者失败后自动切换到其他服务提供者服务器进行重试。这通常用于读操作或者具有幂等的写操作,需要注意的是重试会带来更长延迟。可通过 re...
2019-04-18 14:45:39 224
原创 “小辣椒”,Lombok
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!在Java项目里,每个JaveBean中我们都需要创建get/set方法,虽然idea中提供了快速构建get/set方法,但是每次增删改属性都需要维护它的get/set方法,特别麻烦。所以今天介绍Lombok插件,使我们平常在开发过程中提高效率,使JavaBean的代码可以至少省一半。一、什么是Lombok官网地址:https://...
2019-03-27 18:50:55 1102
原创 Java常用工具类
注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!在Java中,工具类中提供了一些常用的公共方法,以减少自己写工具类,提高开发效率,以下本文将介绍使用最频繁及最通用的工具类。一、org.apache.commons.lang3.StringUtilsisBlank:字符串是否为空 (trim后判断)isNotBlank:字符串是否不为空 (trim后判断),等同于! isBla...
2019-03-20 15:00:18 143
原创 Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,以下是这三个辅助类的用法。注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!一、CountDownLatchCountDownLatc...
2019-03-15 15:43:38 146
原创 python实现12306火车票查询
python实现12306火车票查询== 注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!==某天突然心血来潮,想熟悉下python(目前零接触python),加上年尾将近,车票成了年底热议的话题,故本文由此而生。由于本人是Java出身,故学习python难度不大,虽语法不同,但大同小异,代码实现import requestsimport jsonimport os'...
2018-12-27 11:53:09 1725
原创 算法-狄克斯特拉算法
狄克斯特拉算法注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!一、简介狄克斯特拉算法(Dijkstra )用于计算出不存在非负权重的情况下,起点到各个节点的最短距离二、场景从A出发是否存在到达B的路径;从A出发到达B的最短路径(时间最少、或者路径最少等),事实上最后计算完成后,已经得到了A到各个节点的最短路径了;三、实现思路找出“最便宜”的节点,即可在最短时间内到...
2018-12-24 18:21:52 387
原创 算法-贝尔曼-福特算法
算法-贝尔曼-福特算法注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!一、简介贝尔曼-福特算法(Bellman–Ford algorithm )用于计算出起点到各个节点的最短距离,支持存在负权重的情况它的原理是对图进行最多V-1次松弛操作,得到所有可能的最短路径。其优于狄克斯特拉算法的方面是边的权值可以为负数、实现简单,缺点是时间复杂度过高,高达O(VE)。但算法可以进行若...
2018-12-24 18:09:24 9916
原创 Spring boot集成Zuul 运行提示Cannot register bean definition错误
一、Spring boot集成zuul遇到的问题Spring boot 集成Spring cloud zuul运行控制台输出的错误描述:Description:The bean 'counterFactory', defined in class path resource [org/springframework/cloud/netflix/zuul/ZuulServerAutoConf...
2018-12-21 17:23:48 7002
原创 JedisLock基于Redis实现分布式锁
JedisLock基于Redis实现分布式锁一、 背景实际的项目开发过程中我们常常遇到高并发访问,容易导致数据不同步,例如:库存的增加, 故此我们可以通过Redis提供的特性实现分布式锁,以达到数据的同步性。本文通过Redis的客户端JedisLock来实现。注:该文是本博主记录学习之用,没有太多详细的讲解,敬请谅解!二、 Redis实现分布式锁的原理1、选用Redis实现分布式锁原因:...
2018-12-12 18:58:04 5684
原创 Curator基于zookeeper实现分布式锁
Curator基于zookeeper实现分布式锁一、背景由于原生zookeeper实现的分布式锁实现步骤繁琐且不好控制,Curator提供了很好的基于zookeeper的实现,提供了InterProcessMutex(可重入锁)、InterProcessSemaphoreMutex、InterProcessReadWriteLock(读写锁)相关锁的操作。注:该文是本博主记录学习之用,没有太...
2018-12-10 11:45:10 746
转载 JVM原理及调优
JVM原理及调优一、什么是JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM自身的物理结构,我们可以从下图鸟瞰一下:二、JAVA代码编译和执行过程Java代码编译是由Java源码编译器来完成,流程图如下所示:Java字节码的执行是由JV...
2018-12-04 17:34:23 149
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人