
dubbo
森林森
java学习
展开
-
Dubbo报错:Invalid name=“org.apache.dubbo.config.ApplicationConfig#0“ contains illegal character,
dubbo启动报错Invalid name="org.apache.dubbo.config.ApplicationConfig#0" contains illegal character, only digit, letter, '-', '_' or '.' is legal.Springboot2.2.9+ dubbo-spring-boot-starter2.2.1原因:没有指定name和id等属性,然后由spring会自动生成name,类似“org.apache.dubbo.config.原创 2020-09-01 18:50:16 · 16161 阅读 · 4 评论 -
Dubbo-数据包结构解析
Dubbo数据包dubbo协议采用固定长度的消息头(16字节)和不定长度的消息体来进行数据传输,消息头定义了底层框架(netty)在IO线程处理时需要的信息协议详情Magic - Magic High & Magic Low (16 bits)标识协议版本号,Dubbo 协议:0xdabbSerialization ID (5 bit)标识序列化类型:比如 fastjson 的值为6Event (1 bit)标识是否是事件消息,例如,心跳事件。如果这是一个事件,则设置原创 2020-08-11 19:27:53 · 731 阅读 · 0 评论 -
Dubbo-Invoker执行逻辑
Invoker接口public interface Invoker<T> extends Node { /** * get service interface. * * @return service interface. * 当前执行器的服务接口是哪一个 */ Class<T> getInterface(); /** * invoke. * * @param invoc原创 2020-08-11 18:58:02 · 538 阅读 · 0 评论 -
Dubbo-集群容错-解析
Dubbo-集群容错感念集群工作过程可分为两个阶段,第一个阶段是在服务消费者初始化期间,集群 Cluster 实现类为服务消费者创建 Cluster Invoker 实例,即上图中的 merge 操作。第二个阶段是在服务消费者进行远程调用时。以 FailoverClusterInvoker 为例,该类型 Cluster Invoker 首先会调用 Directory 的 list 方法列举Invoker 列表(可将 Invoker 简单理解为服务提供者)Directory 的用途是保存 Invo原创 2020-08-11 17:43:32 · 1012 阅读 · 0 评论 -
Dubbo-getExtensionLoader 步骤
getExtensionLoader 加载过程先去缓存中EXTENSION_LOADERS private static final ConcurrentMap<Class<?>, ExtensionLoader<?>> EXTENSION_LOADERS = new ConcurrentHashMap<>(64); 加载第一次是空创建一个新的放入,value new ExtensionLoader()new ExtensionLoader构造方法,E原创 2020-08-11 09:37:40 · 300 阅读 · 0 评论 -
Dubbo-Adaptive实现解析
Dubbo-Adaptive实现解析介daptive的主要功能是对所有的扩展点进行封装为一个类,通过URL传入参数的时动态选择需要使用的扩展点。其底层的实现原理就是动态代理ExtensionLoader-getAdaptiveExtension public T getAdaptiveExtension() { //从缓存中获取 进行Holder和加锁的方式来保证只会被创建一次 Object instance = cachedAdaptiveInstance.原创 2020-08-10 21:38:47 · 417 阅读 · 0 评论 -
Dubbo -ExtensionLoader-源码-解析
ExtensionLoadergetExtensionLoader 获取扩展点加载器 并加载所对应的所有的扩展点实现getExtension 根据name 获取扩展的指定实现成员变量 private static final Logger logger = LoggerFactory.getLogger(ExtensionLoader.class); private static final Pattern NAME_SEPARATOR = Pattern.compile("\原创 2020-08-10 21:12:49 · 273 阅读 · 0 评论 -
URL规则详解 和 服务本地缓存
URL地址protocol://host:port/path?key=value&key=valuedubbo://10.18.200.149:20880/org.apache.dubbo.demo.DemoService?anyhost=true&application=demo-provider&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=org.apach原创 2020-08-10 17:42:12 · 910 阅读 · 0 评论 -
Dubbo-服务暴露源码-解析
-ServiceConfig-doExport protected synchronized void doExport() { if (unexported) { throw new IllegalStateException("The service " + interfaceClass.getName() + " has already unexported!"); } if (exported) {原创 2020-08-10 17:06:17 · 751 阅读 · 0 评论 -
Dubbo -整体调用链路
服务消费者通过代理对象 Proxy 发起远程调用,接着通过网络客户端 Client 将编码后的请求发送给服务提供方的网络层上,也就是 Server。Server 在收到请求后,首先要做的事情是对数据包进行解码。然后将解码后的请求发送至分发器 Dispatcher,再由分发器将请求派发到指定的线程池上,最后由线程池调用具体的服务。这就是一个远程调用请求的发送与接收过程淡绿色代表了 服务生产者的范围 淡蓝色 代表了服务消费者的范围 红色箭头代表了调用的方向业务逻辑层(Interface )R.原创 2020-08-10 10:45:39 · 2407 阅读 · 0 评论 -
Dubbo-spi 浅析
Dubbo SPI扩展点:通过 SPI 机制查找并加载实现的接口-又称“扩展接口”扩展点实现:实现了扩展接口的实现类。JDK SPI 在查找扩展实现类的过程中,需要遍历 SPI 配置文件中定义的所有实现类,该过程中会将这些实现类全部实例化。如果 SPI 配置文件中定义了多个实现类,而我们只需要使用其中一个实现类时,就会生成不必要的对象。例如,org.apache.dubbo.rpc.Protocol 接口有 InjvmProtocol、DubboProtocol、RmiProtocol、HttpPr原创 2020-08-10 10:02:52 · 345 阅读 · 0 评论 -
Dubbo-服务动态降级
服务降级服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务有策略的降低服务级别,以释放服务器资源,保证核心任务的正常运行为什么要使用服务降级而为什么要使用服务降级,这是防止分布式服务发生雪崩效应,什么是雪崩?就是蝴蝶效应,当一个请求发生超时,一直等待着服务响应,那么在高并发情况下,很多请求都是因为这样一直等着响应,直到服务资源耗尽产生宕机,而宕机之后会导致分布式其他服务调用该宕机的服务也会出现资源耗尽宕机,这样下去将导致整个分布式服务都瘫痪,这就是雪崩dubbo 服务降级实原创 2020-08-07 20:30:39 · 350 阅读 · 0 评论 -
Dubbo-路由规则
官方http://dubbo.apache.org/zh-cn/docs/user/demos/routing-rule-deprecated.htmlhttp://dubbo.apache.org/zh-cn/docs/user/demos/routing-rule.html原创 2020-08-07 20:26:36 · 399 阅读 · 0 评论 -
Dubbo-线程池
Dubbo-线程池fix: 表示创建固定大小的线程池。也是Dubbo默认的使用方式,默认创建的执行线程数为200,并且是没有任何等待队列的。所以再极端的情况下可能会存在问题,比如某个操作大量执行时,可能存在堵塞的情况。后面也会讲相关的处理办法。cache: 创建非固定大小的线程池,当线程不足时,会自动创建新的线程。但是使用这种的时候需要注意,如果突然有高TPS的请求过来,方法没有及时完成,则会造成大量的线程创建,对系统的CPU和负载都是压力,执行越多反而会拖慢整个系统。默认是fix原创 2020-08-07 18:11:42 · 1792 阅读 · 0 评论 -
Dubbo-负载均衡
在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。Random LoadBalance随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。RoundRobin LoadBalance轮询,按公约后的权重设置轮询比率。存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。LeastActive LoadBala原创 2020-08-07 15:54:16 · 232 阅读 · 0 评论 -
Dubbo-调用时拦截操作-Filter
Dubbo的Filter机制,是专门为服务提供方和服务消费方调用过程进行拦截设计的,每次远程方法执行,该拦截都会被执行。这样就为开发者提供了非常方便的扩展性,比如为dubbo接口实现ip白名单功能、监控功能 、日志记录等实现步骤1.实现 org.apache.dubbo.rpc.Filter 接口public class DubboInvokeFilter implements Filter {2. 使用 org.apache.dubbo.common.extension.Activate原创 2020-08-07 14:55:20 · 1870 阅读 · 0 评论 -
Dubbo-spi-demo与Adaptive使用
建立API模块-dubbo-spi-demo-apiapi添加依赖 <dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.5</version> .原创 2020-08-07 12:04:39 · 417 阅读 · 0 评论 -
Dubbo管理控制台 dubbo-admin
去github 下载https://github.com/apache/dubbo-admin修改配置进入dubbo-admin-server\src\main\resourcesapplication.properties修改为zk地址默认为127.0.0.1:2181回到项目根目录mvn clean package -Dmaven.test.skip=true等打包完成,去dubbo-admin-server\target目录下找到jar包cp出来到一个地方java -j原创 2020-08-06 16:06:30 · 188 阅读 · 0 评论 -
搭建Dubbo源码环境
要搭建Dubbo 源码环境,你首先需要下载源码。这里你可以直接从官方仓库 https://github.com/apache/dubbofork一个到自己的仓库从自己仓库下载git clone git@github.com:ln0491/dubbo.git因为目前最新的是 Dubbo 2.7.7 版本,用这个新版本git checkout -b dubbo-2.7.7 dubbo-2.7.7 执行 mvn 命令进行编译mvn clean install -Dmaven.test.ski原创 2020-07-28 21:01:27 · 418 阅读 · 0 评论 -
JDK-SPI
新建一个项目定义接口public interface Log { void log(String info);}实现public class Logback implements Log { @Override public void log(String info) { System.out.println("Logback:" + info); }}public class Log4j implements Log {原创 2020-08-06 11:54:50 · 111 阅读 · 0 评论 -
Dubbo-服务消费者是如何告诉注册中心自己关注哪些 Provider
注册consumer节点-ZookeeperRegistry -doRegister消费者启动时,会根据订单订阅的接口在对应的节点下创建consumer节点ZookeeperRegistry -doSubscribedoSubscribe() 方法是订阅操作的核心实现consumer://192.168.5.1/org.apache.dubbo.demo.DemoService?application=demo-consumer&category=providers,configur原创 2020-08-06 11:12:36 · 464 阅读 · 0 评论 -
Dubbo-服务提供者向Zookeeper注册了什么
服务提供者在启动时会调用ZookeeperRegistry#中 @Override public void doRegister(URL url) { try { //创建节点 zkClient.create(toUrlPath(url), url.getParameter(DYNAMIC_KEY, true)); } catch (Throwable e) { throw new RpcExcept原创 2020-08-06 10:32:43 · 888 阅读 · 0 评论 -
dubbo 连接远程的 zookeeper 失败
dubbo 连接远程的 zookeeper 失败本地连接地正常,连接远程的Zk就报错,Exception in thread "main" java.lang.IllegalStateException: zookeeper not connected at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init>(CuratorZookeeperClient.java:83) at org.ap原创 2020-08-06 10:04:23 · 2759 阅读 · 0 评论 -
dubbo 快速启动-根据官网demo
官网:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html官网demo: https://github.com/apache/incubator-dubbo新建项目父pom文件<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www....原创 2018-12-21 17:56:04 · 672 阅读 · 0 评论 -
dubbo 快速启动-结合spring注解使用做微服务
开始是在之前的项目上https://blog.youkuaiyun.com/ko0491/article/details/85166785provider更改新建spring.xml&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&amp;lt;beans xmlns=&原创 2018-12-21 18:28:24 · 1037 阅读 · 0 评论 -
dubbo 快速启动-结合spring注解使用com.alibaba.dubbo.container.Main启动
开始是在之前的项目上https://blog.youkuaiyun.com/ko0491/article/details/85168055只更改Main类之前的现在的public class Main3 { public static void main(String[] args) throws IOException { // com.alibaba.dubbo...原创 2018-12-28 20:07:41 · 1355 阅读 · 0 评论 -
dubbo 快速启动-结合spring注解使用com.alibaba.dubbo.container.Main启动
开始是在之前的项目上https://blog.youkuaiyun.com/ko0491/article/details/85168055只更改Main类之前的现在的public class Main3 { public static void main(String[] args) throws IOException { // com.alibaba.dubbo...原创 2018-12-28 20:24:04 · 6869 阅读 · 0 评论 -
maven打包插件:appassembler
项目https://www.jianshu.com/p/d8b8bbfc8764github:https://github.com/ln0491/dubbo-demopom.xml&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance...原创 2018-12-28 20:26:07 · 609 阅读 · 0 评论 -
Dubbo-Admin管理平台和Zookeeper注册中心的搭建
Dubbo-Admin管理平台和Zookeeper注册中心的搭建ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架...原创 2019-06-19 18:35:06 · 209 阅读 · 0 评论 -
dubbo-rest学习
建立普通的dubbo项目api<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache...原创 2019-09-02 16:02:30 · 367 阅读 · 0 评论 -
Dubbo org.apache.dubbo.container.Main.main做了什么事
启动过程org.apache.dubbo.container.Main.main(args);通过这个类启动会走下面的这个容器默认为 SpringContainer for (Container container : containers) { container.start(); logger.info("Dub...原创 2019-09-06 10:54:28 · 1265 阅读 · 0 评论 -
Dubbo SPI
dubbo spiSPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有...原创 2019-09-10 20:04:02 · 156 阅读 · 0 评论 -
dubbo 启动报 服务注册失败Failed to register dubbo
java.lang.IllegalStateException: Failed to register dubbo://192.168.187.1:20880/com.ghg.dubbo.api.GreetingService?anyhost=true&application=demo-provider&bean.name=com.ghg.dubbo.api.GreetingSer...原创 2018-12-21 17:38:49 · 55274 阅读 · 0 评论