自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 Spring cloud Hystrix 服务容错保护---断路器(4)- 请求合并

因为依赖服务的线程池有限,将出现排队等待与响应延迟的情况,为了优化这些问题,Hystrix提供了HystrixCollapser来实现请求的合并,以减少 通信消耗和线程数的占用。HystrixCollapser实现了在HystrixCommand之前放置一个合并处理器,将处于一个很短的时间窗(默认10毫秒)内对同一依赖服务的多个请求进行整合并以批量方式发起请求的功能(服务提供方也需要提供相应的...

2018-07-19 17:34:04 261

原创 Spring cloud Hystrix 服务容错保护---断路器(3)- 请求缓存

Hystrix有两种方式来应对高并发场景:请求缓存和请求合并。请求缓存:当系统并发量越来越大,每个微服务都要承受很大的压力,因为请求依赖服务的资源需要通过通信来实现,如果每一此都去服务提供者的服务器去请求服务,获得数据,那么高并发的情况下,性能会低下,Hystrix提供了请求缓存功能,我们可以开启请求缓存功能来优化系统,以便减轻请求线程消耗和降低 请求响应时间。 开启请求缓存:继承...

2018-07-19 16:55:56 376

原创 Spring cloud Hystrix 服务容错保护---断路器(1)

在微服务架构中,存在着那么多服务单元,而且单元与单元之间存在着很多调用,万一某一个服务单元出现问题,就很有可能因为依赖关系而引发故障的蔓延,最终导致整个系统瘫痪,所以我们需要断路器。在分布式架构中,断路器模式也是一样的,当某个服务单元发生故障,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间等待。这样就避免了雪崩式的连环故障导致系统瘫痪。快速入门:导入依赖:<d...

2018-07-18 16:36:09 292

原创 Spring cloud Ribbon 客户端负载均衡

Ribbon几乎存在于每一个Spring cloud构建的微服务和基础设施中,因为微服务之间的调用,API网关的请求转发等内容实际上都是通过Ribbon来实现的,是一个客户端负载均衡的工具类框架。通过Spring Cloud Ribbon的封装,在微服务架构中使用客户端负载均衡调用很简单,只需要两个步骤:1、服务提供者只需要启动多个服务实例并注册到注册中心2、服务消费者直接通过调用被@...

2018-07-18 15:38:50 306

原创 Spring cloud eureka服务治理(2)

本文主要讲解eureka的基础架构、服务治理机制、和一些配置详解一、基础架构:Eureka整个服务治理基础架构的三个核心要素:服务注册中心,服务提供者、服务消费者;很多时候服务端提供者也会是消费者。二、服务治理机制服务提供者(1)服务注册服务提供者在启动的时候回通过发送REST请求的方式将自己注册到Eureka Server上,同时会携带自身的一些元素局,Eureka Se...

2018-07-18 14:21:49 213

原创 Spring cloud Eureka 服务治理(1)

Spring cloud eureka是用来实现服务的注册和发现;既包含了服务端组件也包含了客户端组件。Eureka的服务端也成为服务注册中心,支持高可用配置,Eureka客户端主要处理服务的注册与发现,Eureka的客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务,也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期性地刷新服务状态。本篇文章主要分为以下几个方面:...

2018-07-18 13:32:39 195

原创 Docker-compose的理解

Docker-compose是docker的服务编排工具,主要是用来构建多个服务,一般是构建构建多个有关联的服务,比如要部署一个Spingboot项目,那么一般都需要关系型数据库,有可能还需要NOSQL,比如redis;如果利用dockerfile来构建,就需要编写三个dockerfile,构建镜像,运行容器;但是使用docker-compose,就可以将这三个服务都包含在一个docker-com...

2018-07-17 23:06:14 3966

原创 Flyway详解以及Springboot集成Flyway

Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里;不仅支持Command Line和java api ,也支持Build构建工具和Spring boot,也可以在分布式环境下能够安全可靠安全地升级数据库,同时也支持失败恢复。Flyway最核心的就是用于记录所有版本演化和状态的MetaData表,Flyway首...

2018-07-17 22:14:41 32506 2

原创 dockerfile文件中命令详解

FROM:指定基础镜像,比如你要创建一个springboot项目的镜像,那么就需要jre作为基础镜像;查找需要的基础镜像的方法:docker serch xxxx  或者去docker hub上查找; RUN:构建容器运行的命令,格式有两种:1)RUN ['execuable','param1','param2']2)RUN <command> CMD:容器...

2018-07-17 15:10:43 1226

原创 docker-compose 启动springboot和mysql服务

直接进入正题:1:首先创建一个springboot项目2:创建一个测试用的controller:@RequestMapping(value="/test")@RestControllerpublic class TestController { @Autowired private JdbcTemplate jdbcTemplate; @Reques...

2018-07-17 13:09:55 5038 3

原创 学习docker 命令

docker images == docker image ls   ---列出所有的docker 镜像docker build ----利用dockerfile构建一个docker镜像docker rm --移除一个或者多个容器,只能移除停止了的容器docker rmi -- 删除镜像docker run --启动一个容器docker stop --停止一个容器 dock...

2018-07-17 11:34:43 184

原创 Springboot 集成 Swagger

Swagger是一个自动生成API文档的 框架,避免了传统的手动编写API文档,然后再发给前段的繁琐。首先:1、新建一个Sping boot项目,引入以下依赖:<dependency> <groupId>io.springfox</groupId> <artifactId>springfo...

2018-07-16 17:46:01 121

原创 Guava-EventBus 详解

  个人对EventBus的理解是: 它是一个事件(消息)发布订阅框架,在我们的应用中可以处理一些异步任务。先通过代码来看下它的简单用法:

2018-07-10 18:45:15 1818

原创 Spring Cloud入门

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVW的云应用开发的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话、集群状态管理1、配置服务: Spring Cloud提供了Config server,它在分布式系统开发中做外部配置的功能,通过Config Server我们可以集中存储所有应用的配置文件.Config Se...

2018-06-27 16:10:33 1367

原创 微服务架构的九大特性

服务组件化:    在微服务架构中,需要我们对服务进行组件化分解,服务是一种进程外的组件,它通过HTTP等通信协议进行协作,而不是像传统组件那样镶入式的方式协同工作,每一个服务都独立开发、部署、可以有效避免一个服务的修改引起整个系统的重新部署。按业务组织团队:    在实施微服务架构时,需要采用不同的团队分割方法。由于每一个服务都是针对特定的业务的宽栈或者全栈实现的,纪要负责数据的持久化存储,又要...

2018-06-27 16:06:47 4136 1

原创 Spring boot 之 actuator

spring-boot-starter-actuator是Spring-boot中非常有用的模块,该模块能够自动为Spring boot构建的应用提领一系列用于监控的端点。同时,也为后续的Spring-cloud在实现各个微服务组件的时候,进行了很多扩展。spring-boot-starter-actuator对实施中小的微服务的团队有效的省去或大大减少监控系统在采集应用指标时的开发量。当然有些时...

2018-06-27 11:23:27 880

原创 CountDownLatch控制多个线程的执行

需求:多个线程同时工作,然后其中几个线程可以随意并发,但是有一个线程要等待之前几个线程并发执行的结果,才能开始执行, 举例:开启多个线程下载一个文件,每个线程固定下载一段,最后由一个线程来拼接之前的线程下载的结果,那么这个时候我们就可以使用CountDownLatch来实现以上的需求。CountDownLatch 是Concurrent包中的一个辅助类,可以把他看成是一个计数器,其内部维护着一个c...

2018-06-22 17:22:06 2697 1

原创 同步屏障CyclicBarrier

CyclicBarrier要做的事就是让一组线程到达一个屏障是被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。CyclicBarrier默认的构造方法是CyclicBarrier(int parties), 其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。CyclicBarrier 是N...

2018-06-22 17:19:54 299

原创 Exchanger 线程之间交换数据

Exchanger是用于线程之间交换数据的工具类,它提供一个同步点,在这个同步点,两个线程可以彼此交换数据。这两个线程通过exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。注意:Exchanger只能在两个线程之间交换数据,不支持更多的线程。当线程A调用了Exchanger对象的exchange()方法后,会陷入阻塞状态,直到线程B也调用了...

2018-06-22 17:18:31 235

转载 WeakHashMap的详细理解

WeakHashMap 继承于AbstractMap,实现了Map接口。    和HashMap一样,WeakHashMap 也是一个散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。   不过WeakHashMap的键是“弱键”。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于一个给定的键,其映...

2018-06-22 17:15:37 33025 6

原创 第六条:消除过期的对象引用

为了直观,我们先上代码,哈哈哈哈哈:public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack(){ eleme...

2018-06-22 16:15:12 242

原创 第五条:避免创建不必要的对象

一般来说,我们最好能够重用对象,而不是每次需要的时候都去创建一个相同的对象。重用对象即快速,又流行,如果对象时不可变的,它就始终可以被重用。下面有一个反面的例子:String s=new String("string");该语句每次被执行都会创建一个新的String实例,但是这是不必要的,传递给String构造器的参数本身就是一个String实例,功能方面等同于构造器创建的所有对象,如果这是一个被...

2018-06-22 15:44:52 160

原创 第四条:通过私有构造器强化不可实例化的能力

想要一个类不被外部实例化,就不能提供公有构造器,如果不提供显示的公有构造器,编译器会自动提供一个公有的,缺省的构造器,这种情况下,外部还是可以实例化类.解决方案就是,显示提供一个私有的构造器,这样外部就不能实例化它:public class A{ private A(){}}这样做也有副作用,它会使得类不能被子类化。...

2018-06-22 15:19:53 148

原创 第三条:用私有构造器或者枚举类型强化Singleton属性

Singleton指仅仅被实例化一次的类,Java1.5之前,实现Singleton有两种方式,这两种方式都要把构造器保持为私有的,并导出公有的静态成员。第一种:公有静态成员是个final域public class Elvis { public static final Elvis INSTANCE=new Elvis(); private Elvis(){};}第二种:公有成员...

2018-06-22 14:59:37 307

原创 第二条:遇到多个构造器参数时要考虑用构建器

静态工厂和构造器都有一个共同的局限性:他们都不能很好地扩展到大量的可选参数,例如有一个对象,有20个可选参数,如果使用静态工厂或者构造器就有可能需要写20个不同参数个数的构建实例的方法,这样的方式称为重叠构造。重叠构造器模式虽然说是可行的,但是当参数很多很多的时候,客户端代码会很难编写。这个时候还有第二种方法,就是JavaBeans模式,这种模式下调用无参构造函数,然后为每一个参数设置一个sett...

2018-06-22 11:59:42 128

原创 第一条:考虑用静态工厂方法代替构造器

首先看一下下面这个将boolean 转为Boolean对象的方法:public static Boolean valueof(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE;}利用静态工厂方法提供了客户端而不是构造器;静态工厂方法与构造器不同的优势:1、静态工厂方法有自定义的名称,产生的客户端代码更容易阅读。public cla...

2018-06-22 11:15:41 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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