Dubbo
文章平均质量分 55
焦虑的二狗
这个作者很懒,什么都没留下…
展开
-
dubbo实现同时请求所有节点并返回
实现该功能需要先了解dubbo的运行流程,在请求的时候需要获取所有可用的服务invoker,通过实现LoadBalance和AbstractClusterInvoker都能获取到所有的invoker,但是LoadBalance是返回一个合适的invoker,但是AbstractClusterInvoker是容错机制的实现父类,此处会针对LoadBalance返回的invoker执行调用,如果失败在去执行对应的策略,所以我们可以对AbstractClusterInvoker方法进行重新。在源码中有一个For原创 2022-04-27 19:33:24 · 758 阅读 · 1 评论 -
dubbo-无法找到提供者问题(一)
今天启动dubbo,提供者没问题,消费者报错,提示 没有可用的提供者然后具体跟了以下dubbo代码:根据报错的位置是在org.apache.dubbo.config.ReferenceConfig#checkInvokerAvailable private void checkInvokerAvailable() throws IllegalStateException { if (shouldCheck() && !invoker.isAvailable())原创 2022-04-14 01:33:06 · 5045 阅读 · 1 评论 -
十七:执行整体流程
provider:invokerimpl -> AbstractProxyInvoker -> DelegateProviderMetaDataInvoker -> InvokerDelegate -> filterChain(过滤器链) -> DubboExporterhandlerrequestHandler(org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol#requestHandler) -> HeaderE原创 2022-04-09 17:24:12 · 1725 阅读 · 0 评论 -
十六:深度解析dubbo在线运维Qos
转载:https://blog.csdn.net/yuanshangshenghuo/article/details/107563319转载 2022-04-09 10:44:08 · 323 阅读 · 0 评论 -
十五:Dubbo拓展点(一)SPI
介绍API:应用程序接口【Application Programming Interface】SPI:服务提供接口【Service Provider Interface】Java本身提供了SPI机制,常见的如mysql驱动JDK 的 SPI演示测试类 public static void main(String[] args) { ServiceLoader<SPIService> load = ServiceLoader.load(SPIService.c原创 2022-04-02 09:41:32 · 684 阅读 · 0 评论 -
十四:Dubbo集群容错策略(二)负载均衡及集群容错的执行图 以及 整体的调用链图
负载均衡及集群容错的执行图整体调用链图原创 2022-04-01 13:46:18 · 2528 阅读 · 0 评论 -
十四:Dubbo集群容错策略(一) -- failover
INF/dubbo/internal/org.apache.dubbo.rpc.cluster.Clustermock=org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterWrapperfailover=org.apache.dubbo.rpc.cluster.support.FailoverClusterfailfast=org.apache.dubbo.rpc.cluster.support.FailfastClusterfailsaf原创 2022-04-01 13:33:07 · 760 阅读 · 0 评论 -
十三:Dubbo负载均衡(七)router的配置以及ConditionRouter源码解析
路由使用:配置后consumer在获取到集群服务的invoker后 会针对 port为20881的进行过滤介绍 及 源码dubbo的路由规则,主要包括 Router、RouterFactory 两个核心接口和RouterChain一个核心类;其中RouterChain是入口,RouterChain会通过RouterFactory生成Router放入缓存list,然后遍历执行route;而RouterChain主要用于Directory.list方法,根据Invocation会话列出当前符合条件(路原创 2022-03-31 23:26:15 · 1534 阅读 · 0 评论 -
十三:Dubbo负载均衡(六)Directory执行流程
发起一个Consumer端的Rpc接口调用执行流程:org.apache.dubbo.rpc.proxy.InvokerInvocationHandler#invokeorg.apache.dubbo.registry.client.migration.MigrationInvoker#invokeorg.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker#invokeorg.apache.dubbo.rpc.cluster.su原创 2022-03-31 20:38:02 · 295 阅读 · 0 评论 -
十三:Dubbo负载均衡(五)ShortestResponseLoadBalance
ConsistentHash LoadBalance一致性 Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。算法参见:http://en.wikipedia.org/wiki/Consistent_hashing缺省只对第一个参数 Hash,如果要修改,请配置 <dubbo:parameter key=“hash.arguments” value=“0,1” />缺省用 160 份虚拟节点,如果原创 2022-03-31 16:14:18 · 296 阅读 · 0 评论 -
十三:Dubbo负载均衡(四)ShortestResponseLoadBalance
//org.apache.dubbo.rpc.cluster.loadbalance.ShortestResponseLoadBalance#doSelectprotected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) { ...... 删除其他代码 基本同最小活跃数算法 for (int i = 0; i < l原创 2022-03-31 15:43:15 · 230 阅读 · 0 评论 -
十三:Dubbo负载均衡(四)LeastActiveLoadBalance
//org.apache.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance#doSelectprotected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) { // 总个数 int length = invokers.size(); // 最小的活跃...原创 2022-03-31 15:42:27 · 238 阅读 · 0 评论 -
十三:Dubbo负载均衡(三)RoundRobinLoadBalance
源码org.apache.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance //缓存 private ConcurrentMap<String, ConcurrentMap<String, WeightedRoundRobin>> methodWeightMap = new ConcurrentHashMap<String, ConcurrentMap<String, WeightedRoundRobi原创 2022-03-31 14:44:00 · 2124 阅读 · 0 评论 -
十三:Dubbo负载均衡(二)RandomLoadBalance
org.apache.dubbo.rpc.cluster.loadbalance.RandomLoadBalance#doSelect @Override protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) { // Number of invokers int length =原创 2022-03-30 23:46:20 · 409 阅读 · 0 评论 -
十三:Dubbo负载均衡(一)介绍、配置
负载均衡介绍负载均衡的本质是通过算法选择节点,避免过热节点Apache Dubbo提供了包括随机、轮询、最小活跃数等多种算法Apache Dubbo的负载均衡通过loadbalance配置负载均衡算法负载均衡内容RandomLoadBalance加权随机RoundRobinLoadBalance加权轮询LeastActiveLoadBalance最小活跃优先 + 加权随机ShortesResponseLoadBalance最短响应优先 + 加权随机原创 2022-03-30 23:31:48 · 691 阅读 · 0 评论 -
十二:Dubbo高级特性(四)服务分组和版本
服务分组和版本Apache Dubbo的服务分组和版本是强隔离属性服务分组和版本可以实现业务平滑升级服务分组和版本可以实现业务隔离演示providerpublic class ServiceDemoImpl implements ServiceDemo { @Override public String getSelf(String context) { return "ServiceDemoImpl :" + context; }}public原创 2022-03-30 21:30:01 · 5291 阅读 · 0 评论 -
十二:Dubbo高级特性(三)隐式传递参数
图中Consumer中的过滤器为ConsumerContextFilter,会将RpcContext中设置的隐式参数绑定到invoker中,通过RPC传递到Provider,Provider中的过滤器为ContextFilter,会将invoker中的绑定的隐式参数获取到 重新设置到RpcContext上。...原创 2022-03-30 20:50:02 · 435 阅读 · 0 评论 -
十二:Dubbo高级特性(二)服务提供者异步
Apache Dubbo服务提供者异步Apache Dubbo在新版加入了服务提供者异步服务提供者异步在提升性能和响应时长没有任何用处服务提供者异步旨在尽量规避Dubbo任务处理的瓶颈图示:代码演示provider端接口实现public class ServiceDemoImpl implements ServiceDemo { private Executor executor = new ThreadPoolExecutor(2, 4, 1, Time原创 2022-03-29 22:31:06 · 2088 阅读 · 0 评论 -
十二:Dubbo高级特性(一)异步无返回、异步、异步转同步、事件回调
异步无返回配置<dubbo:reference id="serviceDemo" interface="com.jiangzheng.course.dubbo.api.service.ServiceDemo"> <dubbo:method name="sayHello" return="false"/></dubbo:reference>注意此处有个坑:如果通过配置的dubbo:reference的话,在使用的时候 请勿在使用@DubboRefe原创 2022-03-28 23:34:41 · 1653 阅读 · 1 评论 -
十一:Apache Dubbo 之 Filter(二)filter加载机制以及系统中的默认的filter
//org.apache.dubbo.config.ServiceConfig#doExportUrlsFor1Protocol方法中Exporter<?> exporter = PROTOCOL.export(wrapperInvoker); //org.apache.dubbo.qos.protocol.QosProtocolWrapper#export @Override public <T> Exporter<T> export(Inv原创 2022-03-26 16:19:20 · 1140 阅读 · 0 评论 -
七:服务暴露剖析(四)export的执行链路 以及refer的执行链路
ServiceConfig //org.apache.dubbo.config.ServiceConfig#doExportUrlsFor1Protocol private void doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List<URL> registryURLs) { String name = protocolConfig.getName(); if (StringUtils原创 2022-03-22 17:33:57 · 340 阅读 · 0 评论 -
十一:Apache Dubbo 之 Filter(一)介绍及演示
Apache Dubbo Filter 介绍Apache Dubbo的Filter与Servlet 的Filter功能类似自定义Filter需要扩展Filter接口自定义Filter可以通过@Activate注解完成默认开启Apache Dubbo Filter 演示定义filterpackage com.jiangzheng.course.dubbo.provider.filter;import org.apache.dubbo.common.URL;import org.apac原创 2022-03-22 14:23:12 · 1867 阅读 · 0 评论 -
十:线程与线程池(四)---线程池
线程池线程池线程池作用fixed固定大小线程池,启动时建立线程,不关闭,一直持有cached缓存线程池,空闲一分钟自动删除,需要时重建limited可伸缩线程池,但池中的线程数只会增加不会收缩eager优先创建Worker线程池线程配置fixed: <dubbo:protocol name=“dubbo” port=“29014” dispatcher=“all” threadpool=“fixed” threadname=“jangzh原创 2022-03-21 23:25:30 · 293 阅读 · 0 评论 -
十:线程与线程池(三)
我们继续深入调用流程我们从createServer开始了解在 Exchangers.bind方法中传入了ExchangeHandlerAdapter的实现 ,即: requestHandler private ProtocolServer createServer(URL url) { url = URLBuilder.from(url) // send readonly event when server closes, it's enabled原创 2022-03-20 09:14:30 · 328 阅读 · 0 评论 -
十:线程与线程池(二)
接下来我们继续分析 五种线程模型的逻辑实现其中关于 bossGroup 与 workerGroup 的关系, 查看此链接了解ALL:所有消息都派发到线程池//org.apache.dubbo.remoting.transport.dispatcher.all.AllChannelHandlerpublic class AllChannelHandler extends WrappedChannelHandler { public AllChannelHandler(ChannelHand原创 2022-03-20 00:05:48 · 153 阅读 · 0 评论 -
十:线程与线程池(一)
课程主要内容:掌握Apache Dubbo线程模型异同掌握Apache Dubbo线程池异同与选择了解Apache Dubbo线程数选择线程模型线程模型线程模型作用All所有消息都派发到线程池,包括请求、响应、连接事件、断开事件、心跳等Direct所有请求都不派发到线程池,全部在IO线程上直接执行Message只有请求响应消息派发到线程池Excution只有请求消息派发到线程池,不含响应Connection在IO现呈上,将连接断开事件放入原创 2022-03-19 15:37:40 · 1990 阅读 · 0 评论 -
九、Apache Dubbo 3 协议解析(三)Dubbo协议解析入口讲解
先找入口类:服务端org.apache.dubbo.config.bootstrap.DubboBootstrap#startorg.apache.dubbo.config.bootstrap.DubboBootstrap#exportServicesorg.apache.dubbo.config.ServiceConfig#exportorg.apache.dubbo.config.ServiceConfig#doExportorg.apache.dubbo.config.ServiceCo原创 2022-03-19 10:33:31 · 3329 阅读 · 0 评论 -
九:Apache Dubbo 3 协议解析(二)int类型序列化
一个示例代码,代码中没有考虑高位正负位计算,所以反序列化存在问题,不可用于生产package com.jiangzheng.course.dubbo.provider.service;public class SerializeDemo { /** * 序列化一个int * int -> 0x11 0x22 0x33 0x44 * * @param n * @return */ public static byte[]原创 2022-03-16 23:22:09 · 257 阅读 · 0 评论 -
九:Apache Dubbo 3 协议解析(一)
课程主要内容:了解网络传输协议了解Dubbo 3协议使用流程掌握Dubbo 3核心协议了解网络传输协议传输协议有名通信协议通信双方对数据传送控制的一种约定优秀的协议设计是提高网络传输速度和安全的保障之一关于拆包/粘包,可以查看链接了解下面图简单描述下Dubbo的协议...原创 2022-03-16 21:07:38 · 421 阅读 · 0 评论 -
八:DubboConsumer三种调用Provider的方式
Consumer端dubbo:reference的三种配置方式1、直连提供者<dubbo:reference id=“serviceDemo” interface=“com.jiangzheng.course.dubbo.api.service.ServiceDemo” url=“dubbo://localhost:29014”/>2、本地调用<dubbo:reference id=“serviceDemo” interface=“com.jiangzheng.course.du原创 2022-03-15 23:11:39 · 2055 阅读 · 0 评论 -
七:服务暴露剖析(三)远程暴露及远程调用和直连提供者
服务暴露远程服务暴露源码讲解:直接从ServiceConfig的exportUrl开始讲解 //org.apache.dubbo.config.ServiceConfig#exportUrl private void exportUrl(URL url, List<URL> registryURLs) { String scope = url.getParameter(SCOPE_KEY); // don't export when none i原创 2022-01-06 23:54:42 · 355 阅读 · 0 评论 -
七:服务暴露剖析(二)本地暴露及本地调用
服务暴露本地服务暴露 //org.apache.dubbo.config.ServiceConfig#exportUrl private void exportUrl(URL url, List<URL> registryURLs) { //<dubbo:service id="serviceDemo" interface="com.jiangzheng.course.dubbo.api.service.ServiceDemo" ref="iServiceDemo"原创 2022-01-06 17:40:39 · 432 阅读 · 0 评论 -
七:服务暴露剖析(一)
主要内容了解RPC掌握Dubbo3的本地暴露掌握Dubbo3的远程暴露了解RPCRPC【Remote Procedure Call】:远程过程调用RPC的核心:像调用本地方法一样调用远程服务RPC的作用:屏蔽包括组包、解包 和 数据发送接收等远程调用细节RPC调用过程图解代码逻辑如图...原创 2022-01-06 14:39:33 · 909 阅读 · 0 评论 -
六:Consumer订阅流程
Consumer订阅流程回到org.apache.dubbo.config.deploy.DefaultModuleDeployer#start 方法,在该方法中有两个重要的方法:1、exportServices(); — privoder的注册 2、referServices(); —consumer的订阅。在之前的章节 有说过 exportServices的一个执行流程,现在咱们在说下 referServices方法的执行流程。 //org.apache.dubbo.config.deploy原创 2021-12-30 20:51:55 · 1475 阅读 · 0 评论 -
五:Dubbo中Provider参数配置及源码讲解
dubbo.application.register-mode参数参数含义interface只接口级注册(/dubbo)instance只应用级注册(/service)all接口级注册与应用级注册并存(/dubbo && /service)dubbo.application.service-discovery.migration参数参数含义FORCE_INTERFACE只消费接口级地址,如无地址则报错,单订阅2.x地址原创 2021-12-30 19:09:59 · 1967 阅读 · 0 评论 -
四、Dubbo服务启动流程
启动类定义DubboNamespaceHandler解析dubbo标签具体释义可以查看https://dubbo.apache.org/zh/docsv2.7/user/configuration/xml/或https://dubbo.apache.org/zh/docs/references/xml/public class DubboNamespaceHandler extends NamespaceHandlerSupport implements ConfigurableSourceBe原创 2021-12-30 17:46:52 · 2135 阅读 · 0 评论 -
三、Dubbo注册中心剖析(二)---源码篇
Dubbo注册zookeeper注册节点结构图2.7.5版本前只有dubbo节点,2.7.5且之后 新增了services节点,并且之后版本会逐渐将dubbo剔除掉这样的优势是将dubbo的结构下随着一个节点注册接口的增多,需要维护更多的节点变更,services结构是按照节点进行接口维护,减轻了zookeeper的节点压力,将计算压力放在了服务器上进行计算。RegistryProtocol.export源码讲解org.apache.dubbo.registry.integration.Reg原创 2021-12-29 20:02:28 · 1254 阅读 · 0 评论 -
三、Dubbo注册中心剖析(一)---实操篇
1、下载Dubbo源码地址https://github.com/apache/dubbo.git2、下载Dubbo Admin源码地址https://github.com/apache/dubbo-admin.git(Dubbo Admin是一款为了Dubbo定制的监控运维平台)3、启动Dubbo Admin参考文档:dubbo-admin编译部署3.1、修改配置文件主要内容为修改配置文件:/Users/****/dubbo-admin/dubbo-admin-server/src/mai原创 2021-12-29 11:14:10 · 508 阅读 · 0 评论 -
二、主流微服务框架比较及基本流程讲解
主流微服务框架比较SpringCloud与DubboDubbo强调的是服务调用的速度和易用性SpringCloud强调的是微服务治理Dubbo和SpringCloud结合是目前的主流做法Dubbo与ThriftDubbo与Thrift都是强调服务调用的速度Dubbo提供了包括本地存根、Mock等各种服务特性Dubbo社区比Thrift社区更活跃...原创 2021-12-28 18:02:27 · 350 阅读 · 0 评论 -
一、构建dubbo项目
1、相关依赖版本依赖版本Springboot2.5.xdubbo3.X2、创建Springboot基础工程由于我们采用的是bom的形式,父工程暂时不需要引入任何依赖3、修改配置文件原始文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/原创 2021-12-28 16:57:37 · 1522 阅读 · 2 评论