spring-cloud
文章平均质量分 68
司青-已停止更新
本博客已停更;
展开
-
Spring Cloud与分布式系统
本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景和意义。背景2008年以后,国内互联网行业飞速发展,我们对软件系统的需求已经不再是过去”能用就行”这种很low的档次了,像抢红包、双十一这样的活动不断逼迫我们去突破软件系统的性能上限,传统的IT企业”能用就行”的开发思想已经不能满足互联网高并发、大流量的性能要求。系统架构走向分布式已经是服务器原创 2016-07-15 17:26:57 · 17979 阅读 · 18 评论 -
@FeignClient同一个name使用多个配置类的解决方案
Feign有一个局限性,即对于同一个service-id只能使用一个配置类,如果有多个@FeignClient注解使用了相同的name属性,则注解的configuration参数会被覆盖。至于谁覆盖谁要看Spring容器初始化Bean的顺序。这个问题的有效解决方案是,当你需要给一个service-id配置第二个@FeignClient时,使用Feign Builder API手动创建接口代理,...原创 2018-09-03 15:32:27 · 23013 阅读 · 2 评论 -
Spring Cloud: 使用kill命令优雅关闭微服务, 解决退出时Eureka取消注册操作耗时过长的坑
关于Spring Cloud服务优雅关闭的方案有很多种了,这里介绍一下使用kill命令优雅关闭的方案,并解决会出现的问题。所谓的优雅指两方面,一是程序在退出时要主动向Eureka取消注册自己,二是完成资源清理工作。比如我的程序里用到了线程池来异步执行一些任务,如果退出时不做清理,那么就有异步任务被异常中断导致业务数据不一致的风险。首先我们不能使用kill -9。如果加了-9,那么系统就不会给J...原创 2018-05-23 11:40:52 · 11189 阅读 · 8 评论 -
传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案
技术架构在向Spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项目调用。这时我们就需要使用原生的Eureka/Ribbon手动完成注册中心、查询服务列表功能。如果是非Java项目,可以使用 Spring Sidecar 项目接入Spring Cloud形成异构系统,原创 2017-04-11 11:49:36 · 19889 阅读 · 25 评论 -
Spring Cloud Netflix Eureka: 多网卡环境下Eureka服务注册IP选择问题
问题场景服务器上分别配置了eth0, eth1和eth2三块网卡,只有eth1的地址是可供其它机器访问,eth0和eth2的 IP 无效。在这种情况下,服务注册时Eureka Client会自动选择eth0作为服务ip, 导致其它服务无法调用。问题原因由于官方并没有写明Eureka Client探测本机IP的逻辑,所以只能翻阅源代码。Eureka Client的源码在eureka-client模块下原创 2016-11-11 11:08:38 · 37914 阅读 · 4 评论 -
Spring Cloud Hystrix: 控制stream推送频率
问题表现在引入spring-boot-starter-actuator依赖后,Spring Boot应用会暴露出/hystrix.stream端点以供监控工具读取该应用的Hystrix Metrics数据。但是默认情况下,该Endpoint每间500ms就会向建立连接的客户端发送metrics数据,频率太高了,浪费CPU和带宽资源。在Hystrix Dashboard主页中虽然有让你输入delay的原创 2017-04-26 14:51:23 · 4774 阅读 · 0 评论 -
Spring Cloud Eureka: 如何指定Zone
有坑。 先说结论:如果想给当前服务指定属于哪个zone, 使用eureka.instance.metadata-map.zone=myzone属性是无效的,而应该使用:eureka.client.availabilityZones.beijing=myzone # beijing是region同时指定region:eureka.client.region=beijing至于原因,可以在Eureka原创 2017-04-25 16:47:52 · 12052 阅读 · 2 评论 -
使用Spring Cloud Netflix技术栈实施微服务架构
前言系统一旦走向分布式,其复杂程度成倍增长,传统单体应用只考虑业务逻辑的开发方式已经不再适用。正因其复杂性,目前只有业务需求大的大型互联网公司才会(被迫)采用,而且需要投入大量的技术力量来开发基础设施,也造成了小公司“用不起”分布式架构的情况。现在这一局面正在逐渐被打破,因为Netflix开源了其经过实战考验的一系列基础设施构件,加上Spring Cloud的大力支持,开发分布式系统已经不再像以前那原创 2016-08-14 14:46:47 · 32206 阅读 · 8 评论 -
Spring Cloud Netflix负载均衡组件Ribbon介绍
LB方案分类目前主流的LB方案可分成两类:一种是集中式LB, 即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;另一种是进程内LB,将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于后者。Ribbon的主要组件与工作流原创 2017-01-01 17:57:11 · 4926 阅读 · 0 评论 -
Spring Cloud Netflix Eureka源码导读与原理分析
Spring Cloud Netflix技术栈中,Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用,因此对Eureka还是有很大的必要进行深入研究。本文主要分为三部分,一是对项目构建的简要说明;二是对程序入口点的定位,帮助大家找到阅读源码的起点;三是对Eureka实现机制的分析;四是与使用Zookeeper相比Eureka作为注册服务的区别。1. 源码1.1 源码获取、构建我们需要分原创 2016-11-11 18:29:04 · 35116 阅读 · 10 评论 -
使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate。但是,用起来最方便、最优雅的还是要属Feign了。Feign简介Feign是一种声明式原创 2016-09-06 14:50:02 · 155513 阅读 · 52 评论 -
微服务基础设施之服务注册中心: Spring Cloud Eureka
对服务注册中心的需求在微服务架构中,由于每一个服务的粒度相对传统SOA来说要小的多,所以服务的数量会成倍增加。这时如果有效管理服务的注册信息就尤为重要。我们对服务注册中心的期望主要有以下几条:简单易用:最好对开发者透明高可用:几台注册中心坏掉不会导致整个服务瘫痪,注册服务整体持续可用避免跨越机房调用:最好调用优先同一个机房的服务以减少网络延迟跨语言:允许开发者使用多种编程语言构建微服务Ne原创 2016-08-11 12:10:29 · 19725 阅读 · 2 评论 -
Spring Cloud(Netflix) Feign: 以Dubbo暴露服务的方式使用Feign
需求场景在微服务架构中,服务的请求者以何种方式调用远程服务是一项核心问题。在Spring Cloud(Netflix)技术栈中,每个微服务是以HTTP REST接口的形式暴露的,这样在执行远程调用时,正常情况下需要使用一个HTTP客户端,然后向服务发起HTTP请求。实际上,如果使用Netflix的Feign作为Http Client的话,我们就可以做到像Dubbo一样,服务的调用者直接调用接口方法调原创 2016-08-11 11:18:29 · 22490 阅读 · 4 评论 -
Eureka, Client, Ribbon之间的缓存和服务实时上下线实现思路分析
在使用Eureka做注册中心时,我平时遇到的最不爽问题,就是无法做到实时上下线。比如,我服务已经正常下线了,为什么上游还能调通?我服务已经上线了,为什么还有等"很久"才能真正被其他服务所"发现"?其实这些都是从Eureka到Client再到Ribbion这条链路中的逐级缓存造成的。Eureka为什么要使用缓存比如,对于Eureka来说,Eureka Client获取注册更新信息时,Eureka...原创 2019-05-14 19:15:31 · 5386 阅读 · 0 评论