![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SpringCloud
凉拌海蜇丝
我要一步一步往上爬~
展开
-
线程池隔离与信号量隔离
隔离:针对不同的服务资源做的限制不会影响到其它服务,例如商城应用有AB两个接口,A接口只允许10个线程访问,B接口允许20个,他们两个应该是互不干扰的服务资源,也就是A接口调用满了不会影响B接口调用。如果不对AB两个接口做资源隔离,只对商城应用做一个大的限制(30)的话,有可能会因为A接口执行较慢,导致占满了30个线程,导致B接口不可用(因为整体应用只允许30)。线程池隔离就是把请求扔给不同的资源(也就是要调用的服务,针对每个服务都创建线程池)的线程池,让线程池创建线程去调用服务执行任务,具体的线程数原创 2021-05-20 15:48:10 · 2754 阅读 · 0 评论 -
SpringBoot如何获取当前项目全部Controller接口的两种方式
业务场景自己想,只分享技术实现。下面的演示由于我为了方便,直接在公司项目中写的,所以一些敏感信息专有名词我要注释,望谅解。首先我们都知道,Spring的IOC机制,所有的接口和service都存在一个map容器,通过BeanFactory和ApplicationContext可以拿。那么我们可以从这个开刀.方案一(1)想想有什么方法或者接口是能够获取到ApplicationContext的,答案当然是有,Aware接口嘛,找到一个ApplicationContextAware,理论上就能获取到Appl原创 2020-10-27 16:42:12 · 17955 阅读 · 13 评论 -
Apollo配置中心的简单使用
Apollo是携程框架部研发并开源的配置中心,能够集中管理应用在不同环境、不同集群的配置,大大方便了微服务架构下的配置文件管理,配置修改后能够实时推送到应用端,无需重启应用,并且具备规范的权限管理,灰度发布,流程管理等,非常适用于微服务配置管理场景。下载安装和运行都非常简单,几乎是开箱即用。(1)启动成功后,点击新增命名空间:(2)(3)(4)在新增的命名空间下新增配置信息,记得点击发布(5)记得在yml配置文件中引入新增的命名空间(6)写一个controller,就像正常地从配置文原创 2020-10-26 17:46:22 · 672 阅读 · 2 评论 -
SpringBoot中的Aware接口
看源码过程中可以看到很多XXXAware,之前没去深究,直到看到有人面试阿里被问到这问题。才决定去了解一下。(1)Aware是什么?是一个接口,里面空白一片,没有任何方法,它是一个空荡荡的定义,一种标记。(2)有什么用?Aware的英文意思是“可感知”,它自身是一个空白的接口,但是它有很多实现类,所以它的功能其实就是可以让调用者获取到某些信息,例如:加载当前Bean的容器名,当前Bean在容器中的BeanName,获取一些文本信息和资源文件等等,去获取加载当前Bean的加载器信息,等等等等。我们原创 2020-10-22 18:33:58 · 2391 阅读 · 0 评论 -
关于Properties/YAML/YML语法的小总结
首先说YML,YAML,Properties的区别:(1)写法不一样。Properties类似于:spring.datasource.username = XXX ,其他两者是缩进的写法,可读性properties更加好接受,但是yaml和yml看上去更加简洁优雅。(2)加载顺序不一样。都是配置文件,启动后Configuration配置类都会去读取和加载里面写的参数,只不过加载的优先级顺序不一样,YML 优先级最高 , YAML 第二,Properties第三。后加载的,会把先加载的覆盖掉。(3)ym原创 2020-10-20 15:32:49 · 4470 阅读 · 1 评论 -
微服务网关gateway的简单使用
先看概念:本人翻译:构建一套分布式系统不一定是复杂和容易出问题的。Spring Cloud为分布式系统提供了一套简单且具有高可用性的编程模版。帮助开发者能够快速构建具有扩展性的,可靠的,协调的分布式应用。Spring Cloud 是基于SpringBoot的基础上构建的,这使得开发者们能够更容易更快速地进行生产工作。大概就是这个意思,本人英语水平有限。从图中来看,Gateway是横穿在客户端和服务端中间的,它虽然叫网关,但是它其实也是一个SpringBoot项目,一个关卡口,所有请求都必须过了它这原创 2020-09-24 15:19:25 · 1911 阅读 · 0 评论 -
OpenFeign和Feign的区别(微服务间调用简单总结)
08年出来做外包,用过Cloud,当时微服务间的相互调用用的还是Feign,其中两年没做过Cloud的项目开发了,重新学了新版本,才知道老一辈那些组件都已经停更了。现在用的都是OpenFeign,简单的理解为Feign的升级版。区别:同:Feign和OpenFeign作用一样,都是进行远程调用的组件。里面都内置了Ribbon。都是加在消费端的注解,让消费端可以调用其他生产者的服务。异:依赖不同,一个是spring-cloud-starter-feign,一个是spring-cloud-star原创 2020-09-24 10:03:45 · 21347 阅读 · 3 评论 -
Hystrix工作流程
官网流程图:1:由HystrixCommand或者HystrixObservableCommand作为构造入口,通过接口方式或者通过注解方式都可以。2:然后,从上述两者选择一种来获取command,但是不管哪种方法,最后都依赖于toObservable()方法。3:查缓存cached response,这里的available caache 就是可用的缓存server,其中包括正确的或者服务降级的都会在这里有缓存,有的话就直接走缓存。4:判断是否打开断路器,如果有,则执行fallback,如果没原创 2020-09-23 09:55:11 · 215 阅读 · 0 评论 -
Hystrix服务熔断和Hystrix DashBoard仪表盘
配置和依赖不说了,在另外一篇记录:[Hystrix做服务熔断](https://blog.csdn.net/whiteBearClimb/article/details/108735872)这一步是针对生产者来做的熔断@HystrixCommand(fallbackMethod = "fallback_functions",commandProperties = { @HystrixProperty(name = "circuitBreaker.enabled", value = "t原创 2020-09-22 17:36:33 · 192 阅读 · 0 评论 -
Hystrix做服务降级
直译是豪猪:表达的意思就是一种保护机制,温顺平和的时候正常运行,遇到突发状况了就针锋相对,以此来保护自己。Cloud中更愿意称之为“短路器”。设想:微服务架构下,调用链很长,A依赖B,B依赖C,C依赖D,忽然D不可用(由于网络原因或者Exception或者机房停电),这个时候会发生连锁反应,导致ABC可能都不可用。Hystrix帮我们解决的:(1)熔断在服务不可用或者多数情况下都不可用的情况下,默认该服务节点挂掉,就像保险丝一样烧断,直接返回不可用信息。免除了无意义的报错信息和等待。(2)服原创 2020-09-22 17:19:06 · 247 阅读 · 0 评论 -
Unable to connect to Command Metric Stream.
学习Cloud搭建HystrixDashboard仪表盘中的小坑。由于Hystrix不更新的,所以2.2版本的Spring对它没做好兼容。要自己在生产者的启动类改造:@SpringBootApplication@EnableEurekaClient@EnableDiscoveryClient@EnableHystrix@EnableCircuitBreakerpublic class CirculateMain { public static void main(String[] ar原创 2020-09-22 14:50:11 · 183 阅读 · 0 评论 -
fallback method wasn‘t found: fallback_functions([class java.lang.XXX])
报错如下:在使用hystrix熔断器的时候出现这个问题,明明指定了对应的fallbackMethod却说找不到,代码如下:原因:fallback_functions与testBreaker的入参必须保持一致!不能说熔断的回调方法不需要参数就不给!解决:...原创 2020-09-22 10:21:23 · 535 阅读 · 0 评论 -
Ribbon七种负载均衡策略详解
Ribbon是什么?主要负责请求分发,例如一个服务节点集群:六台服务器部署着订单服务,用户请求过来了就要根据不同的负载策略分发请求到不同机器上,起到一个缓解请求压力的作用。其自身不会发起请求,这个在源码中可以到,它起到一个“选择”的角色。真正发起请求的还是Feign / OpenFeign 。Ribbon与Nginx的区别?看到上诉的描述跟nginx非常接近,两者都是做轮询,做负载分发请求。那么区别是什么?看图可以看到,Nginx是属于服务器端的负载均衡,Ribbon是属于客户端的负载均衡,简而言原创 2020-09-21 15:11:15 · 19874 阅读 · 10 评论 -
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY‘RE NOT. RENEWALS ARE LESSER
这是Eureka的自我保护机制,是在Server端一定时间内(默认90秒)没有收到Client发送过来的心跳包,便会从服务注册列表中剔除该服务,但是短时间内丢失大量的服务实例心跳(例如30%或者更多的注册服务实例心跳都没接收到),就会自动开启自我保护机制,从而不剔除任何注册服务。原因:为了防止因为网络延迟或者其他网络原因导致的无心跳,从而导致大批量实际可用的健康服务被注册中心剔除,从而导致大批量服务不可用。所以它开启这个机制后,会默认依旧保留一段时间的无心跳服务在注册列表中。禁用自我保护机制:在要关.原创 2020-09-17 16:04:30 · 465 阅读 · 0 评论 -
com.netflix.discovery.shared.transport.TransportException: Retry limit reached; giving up on complet
启动完Eureka注册中心之后启动生产者/消费者出现的这个Bug,打开注册中心也没发现server注册成功。原因:生产者与服务者找不到配置中心,检查yml是否正确配置。1:YML的缩进问题,很容易出这个BUG,多一空格少一空格。2:多个注册中心记得用英文逗号隔开,并且域名和端口号正确填写!...原创 2020-09-17 14:14:55 · 1454 阅读 · 0 评论 -
Eureka服务注册中心+Eureka集群版
抛弃概念,只说自己的理解:首先我们都知道Cloud微服务可以是多个Boot组成,Boot之间的服务相互调用,我们当然可以用RestTemplate,但是如果子项目过多,相互调用频繁,项目与项目之间的耦合度就会非常高,注册中心帮我们解决的一个问题,就是以生产者消费者角度出发的,对代码的改动最小,相当于一个中介的概念,一个集市,每个人都可以放东西上来卖,也可以买别人的东西。Eureka就相当于集市的作用,所以它就是一个注册中心。看图说话?上面的例子我们提出了两个概念例子:生产者/消费者(它们两者都可以互原创 2020-09-17 14:10:49 · 302 阅读 · 0 评论