Dubbo
文章平均质量分 84
Dubbo相关的内容
自东向西
这个作者很懒,什么都没留下…
展开
-
dubbo的SPI拓展顺序问题
背景在项目中定义了3个filter,都是使用的@Activate注解,并指定了顺序:ProviderCatFilter:主要用来打印日志 & 触发cat告警ExceptionFilter:如果有异常,将指定的异常类型转成错误码,不抛异常ValidationFilter:对参数进行校验,参数不合法则抛出参数异常按照定义的order,顺序应该是这样:ProviderCatFilter -> ExceptionFilter -> ValidationFilter。如果真按照这原创 2021-04-13 16:45:26 · 327 阅读 · 0 评论 -
alibaba版本的dubbo在override机制上的bug
背景在之前尝试做dubbo的灰度发布方案《dubbo灰度发布》。在实现的过程中,发现当provider指定了group或者version,而consumer使用*号来匹配所有group或version的时候,alibaba版本和apache版本的dubbo的行为不一样。apache版本是运行正常,但是alibaba版本的consumer却会出现group和version被覆盖的问题。问题原因当consumer监听到configurators目录下的变化,首先需要判断对应的连接是否它关心的:大原创 2021-04-13 12:46:39 · 306 阅读 · 1 评论 -
dubbo灰度发布方案
背景目前我公司自己搭了一套发布系统,底层使用的是docker的swarm,实现了“灰度发布”功能。当开启发布灰度发布的时候,会独立启动一个容器,只允许指定百分比的流量进入到灰度容器中。这一套机制,是依靠在网关中对后端http服务实例做不同的权限实现的,只能对http服务生效。dubbo服务是直接跟注册中心zookeeper拿到所有服务提供者的地址,然后直连服务提供者,并不会经过网关。dubbo负载均衡dubbo的负载均衡机制,其实比我们想的要强大一点,以RandomLoadBalance随机负载均原创 2021-01-25 15:56:54 · 2454 阅读 · 4 评论 -
dubbo实现consumer从多个group中调用指定group的provider
背景在工作中,遇到这样的场景:有个es索引构建服务,需要从各个业务服务获取索引的信息,从而构建索引,业务服务都实现同一个接口——IndexInfoProvider,通过设置不同的group来达到区分的效果(group就是es索引名)。索引构建服务在内存维护了一个Map<String, IndexInfoProvider> providerMap,key是索引名——也就是provider的group,value是IndexInfoProvider服务的consumer。为了图方便,索引构建原创 2020-10-27 16:55:13 · 4797 阅读 · 2 评论 -
dubbo将异常转换成RuntimeException原因分析——ExceptionFilter
问题开发过程中,发现服务提供者抛出了自定义的BusinessException,到了消费者这边,却变成了RuntimeException。客户端这边有BusinessException这个类,提供者抛出的也是这个类的异常,为什么会被转成RpcException呢?代码分析看ExceptionFilter的代码:重点就在圈起来的3个地方:1、有异常,而且接口不能是GenericService才需要判断是否需要转换成RuntimeException,不然直接返回result。2、如果是受检异常,原创 2020-08-19 12:57:09 · 1494 阅读 · 0 评论 -
@Reference(retries=0)依然会重试2次问题分析
问题使用@Reference 注解的时候,发现设置retries=0,还是会出现调用3次的情况,而不是我们期望的不重试。代码分析dubbo默认的集群方式是failover,看FailoverClusterInvoker的代码,重试次数在这部分代码: 从这部分代码可以看出来,次数是从url的retries参数拿到的,如果拿不到就会使用Constants.DEFAULT_RETRIES=2所以,如果@Reference没有配置retries,次数就会是2+1=3,即失败后还会重试2次。但为什原创 2020-08-17 10:01:47 · 1620 阅读 · 2 评论 -
dubbo的@Reference注解作用分析
目的看看dubbo是怎么给加了@Reference注解的属性注入invoker实例,为什么有时候加了@Reference注解的属性会是null。ReferenceAnnotationBeanPostProcessor后置处理看到这个名字,就很容易知道,是专门针对@Reference注解的后置处理...原创 2020-07-30 17:59:50 · 9421 阅读 · 1 评论