排查了3个多小时,因为一个简单的错误,发现一个强大的参数解析工具,记录一下. 背景 Nodejs 通过 tether 调用 Java Dubbo 服务.请求类的某个参数对象 EsCondition 有 fieldName, op, value 三个字段,value 的参数值正确解析, fieldName, op 的参数值解析为 null . 深入到 Dubbo 源码进行单步调试定位到,发现字段 fieldName, op 缺少 setter 方法. 加上之后就正常了. JavaBean约定 定位…
前两天刚好有个同事来问是否用过 dubbo泛化 调用,不需要通过指定配置.第一次听到的时候,还是有点懵,但觉得有意思,可以学点东西. 立马百度了,找了demo,这篇比较容易上手(http://www.cnblogs.com/lobo/p/7129119.html).并结合 dubbo的官方文档(http://dubbo.io/user-guide/demos/%E6%B3%9B%E5%8C%96%E5%BC%95%E7%94%A8.html)写了个demo. provider 直接引用了 dub…
该工具类利用递归原理,能够将任意结构的json字符串进行解析.当然,如果需要解析为对应的实体对象时,就不能用了 package com.wot.cloudsensing.carrotfarm.util; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.json.JSONAr…
@ApiOperation(value = "dubbo泛化调用工具接口") public Result dubboApiTool( @ApiParam(value = "interfaceName", defaultValue = "com.shop.api.ShopService") @Param(value = "interfaceName", required = true) String interfaceName,…
这里我们要使用python的lambda函数,lambda是创建一个匿名函数,冒号前十传入参数,后面是一个处理传入参数的单行表达式. 调用lambda函数返回表达式的结果. 首先让我们创建一个函数fun(x): def fun(x): print x 随后让我们创建一个Button:(这里省略了调用Tkinter的一系列代码,只写重要部分) Button(root, text='Button', command=lambda :fun(x)) 下面让我们创建一个变量x=1: x = 1 最后点击…
引言 当后端Java服务用Dubbo协议作为RPC方案的基础,但部分消费方是前端Restful的PHP服务,不能直接调用,于是在中间架设了Router服务提供统一的基于HTTP的后端调用入口. 而Router调用后端Java服务就应用了Dubbo的高级特性--泛化调用 直接消费方(Router服务)不需要引入接口jar包 通过GenericService接口来处理所有服务请求 以PHP到Router的request body中的方法名和方法参数作为Router远程调用后端Java服务的入参,最后…
Dubbo 是支持泛化调用的,什么是泛化调用呢?泛化调用的好处是什么呢,泛化调用说白一点就是服务消费者并没有服务的接口. 在<Dubbo入门-搭建一个最简单的Demo框架>一文中,我们已完成了最最基本的Dubbo的搭建及调用,我们的dubbo-provider.dubbo-consumer.dubbo-consumer2都是依赖dubbo-api,而dubbo-api其实什么也没做,就定义了一个接口,也就是说,在我们开发写Demo的时候,必做的一件事情,就是在服务消费者和服务提供者两端同路径下…
今晚心情无比激动,多云转晴!原因在于弄懂些 Generic Service 实现原理,很有成就感. 各位看官莫笑,今晚,小小的收获,也是非常满足的.下面进入正题! 一.前言 普遍RPC在客户端需要提供接口,如果不提供则无法进行调用.同时,因为客户端也依赖提供的接口,服务端的升级.优化所带来的更新,客户端也要及时的更新API,否则会带来影响.这样,就带来了依赖接口,常常更新API(接口)的麻烦.为了解决这个问题,需要进行泛化调用. 二.使用 在网上一搜,都是Dubbo的泛化调用的例子,可以很少有讲…
本文借用dubbo.learn的Dubbo API方式来解释原理. 服务消费端泛化调用 前面我们讲解到,基于Spring和基于Dubbo API方式搭建简单的分布式系统时,服务消费端引入了一个SDK二方包,里面存放着服务提供端提供的所有接口类,之所以需要引入接口类是因为服务消费端一般是基于接口使用JDK代理实现远程调用的. 泛化接口调用方式主要在服务消费端没有API接口类及模型类元(比如入参和出参的POJO类)的情况下使用.其参数及返回值中没有对应的POJO类,所以所有POJO均转换为Map表示…
引言 当后端Java服务用Dubbo协议作为RPC方案的基础,但部分消费方是前端Restful的PHP服务,不能直接调用,于是在中间架设了Router服务提供统一的基于HTTP的后端调用入口. 而Router调用后端Java服务就应用了Dubbo的高级特性–泛化调用 直接消费方(Router服务)不需要引入接口jar包 通过GenericService接口来处理所有服务请求 以PHP到Router的request body中的方法名和方法参数作为Router远程调用后端Java服务的入参,最后将…
目录 0.服务的调用 1.发送请求 2.请求编码 3.请求的解码 4.调用具体服务 5.返回调用结果 6.接收调用结果 Dubbo SPI源码解析① Dubbo服务暴露源码解析② Dubbo服务引用源码解析③ ​ 经过前面三章的分析,了解了Dubbo的基础:Dubbo SPI,了解了Provider的服务暴露和Consumer的服务引用.最后我们需要学习一下服务完整的调用过程.Dubbo服务调用过程虽然复杂,比如包含发送请求.编解码.服务降级.过滤器.序列化.线程派发以及响应请求等步骤.但是先理…
结论: 泛化调用需要继承一个类,在配置文件里需要明确指出generic=true; 泛化调用在书写provider代码时,变化不大: 泛化调用和普通调用的区别主要在consumer,从‘调用’的表面意思也能看到端倪: 泛化调用书写客户端时,不需要明确继承和服务端相同的接口: 使用泛化调用结合jmeter打压,也是需要生成客户端consumer的jar包,放到jmeter的lib/ext目录下 进一步研究待续…… 参考 1.https://zhuanlan.zhihu.com/p/29410596…
dubbo泛化引发的生产故障之dubbo隐藏的坑 上个月公司zk集群发生了一次故障,然后要求所有项目组自检有无使用Dubbo编程式/泛化调用,强制使用@Reference生成Consumer.具体原因是线上某服务访问量在短时间大量访问zk并创建了240万+的节点,导致zk所有节点陆续崩溃导致,多个应用因无法连接到zk报错.原因是听说泛化调用时候,provider没启动,导致每次请求都在zk创建消费节点. 由于是和自己关联性不大的项目组,了解的并不是很清楚,但是想搞明白这个事情,因此就进行了如下实…
Dubbo中的Cluster可以将多个服务提供方伪装成一个提供方,具体也就是将Directory中的多个Invoker伪装成一个Invoker,在伪装的过程中包含了容错的处理,负载均衡的处理和路由的处理.这篇文章介绍下集群相关的东西,开始先对着文档解释下容错模式,负载均衡,路由等概念,然后解析下源码的处理.(稍微有点乱,心情不太好,不适合分析源码.) 234567891011121314151617181920212223 public <T> Invoker<T> refer(C…
dubbo + zookeeper + spring Boot框架整合与dubbo泛型调用演示   By:客 授客 QQ:1033553122  欢迎加入全国软件测试交流 QQ  群:7156436 测试环境 1 实践过程 2 Java运行配置 2 zookeeper运行与配置 2 配置 2 运行 3 测试 3 Maven运行与配置 5 配置 5 Repository设置(可选) 6 利用maven打dubbo-admin-0.0.1-SNAPSHOT.jar包 8 dubbo-admin控制台…
背景 dubbo插件中需要记录当前调用的接口和方法,但是在泛化调用的场景下,记录的接口和方法都变成了 com.alibaba.dubbo.rpc.service.GenericService:$invoke,需要把它转化为真实的API和方法 @Override public void after(Object target, Object arg0, Object result, Throwable throwable) { //插件开关 if(!traceContext.collectSwit…
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表 0x00 摘要 0x01 前文回顾 0x02 Embedding 2.1 概念 2.1.1 One-hot 编码 2.1.2 分布式表示 2.1.3 推荐领域 2.2 Lookup 2.3 嵌入层 2.3.1 点积 2.3.2 全连接层 2.3.3 元数据信息 2.3.4 经典架构 2.3.4.1…
Dubbo服务调用的动态代理及负载均衡源码解析请参见:http://manzhizhen.iteye.com/blog/2314514…
前言 通常 RPC 调用需要客户端使用服务端提供的接口,而具体的形式则是使用 jar 包,通过引用 jar 包获取接口的的具体信息,例如接口名称,方法名称,参数类型,返回值类型. 但也存在一些情况,例如客户端没有 jar 包,或者是跨语言的调用,这个时候,就需要客户端使用字符串进行泛化调用. 如何使用 还是根据官方的例子来看一下: ConsumerConfig<GenericService> consumerConfig = new ConsumerConfig<GenericServi…
预解析.预处理 1. 在全局代码执行之前,js 引擎 就会创建一个栈来存储管理所有的 执行上下文对象 2. 在 全局执行上下文 window 确定以后,进行压栈 3. 在 函数执行上下文对象 确定以后,进行压栈 4. 当 函数 执行完,进行 出栈 操作 5. 当所有的代码执行完以后,栈中只剩下 window 注意: 当栈中含有多个 函数上下文对象 ,则表示当前在执行嵌套函数. 产生的上下文对象 个数 = n  + 1个全局上下文对象 当 函数名 与 变量名 相同时,变量名 将被忽略_______…
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute…
9.1 客户端发起请求源码.9.2 服务端接收请求消息并发送响应消息源码.9.3 客户端接收响应信息(异步转同步的实现) 分析了dubbo同步调用的源码,现在来看一下dubbo异步调用. 一.使用方式 服务提供方不变,调用方代码如下: <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService"> <d…
异步通讯对于服务端响应时间较长的方法是必须的,能够有效地利用客户端的资源,在dubbo中,消费端<dubbp:method>通过 async="true"标识. <dubbo:reference id="xxx" ....> <dubbo:method name="method1" async="true" /> </dubbo:reference> 具体有三种方式: 1.NIO…
本文来自网易云社区 作者:张伟 背景 限时购是网易考拉目前比较常用的促销形式,但是前期创建一个限时购活动时需要各个BU按照指定的Excel格式进行选品提报,为了保证提报数据准确,运营需要人肉校验很多信息: 是否已经参加了限时购 在线价与活动价的对比校验 大促价格校验 是否有互斥活动 库存检查 SKU 完整性 价格预警检查 商品可用性校验 这么多人肉的校验数据来自不同的系统,获取数据,检查数据:这是一件很繁琐且工作量巨大的事情.在这样的背景下,促销服务提供了限时购促销校验小工具,极大减少了运营人员…
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (2) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (2) 0x00 摘要 0x01 总体流程 1.1 概述 1.2 如何调用 0x02 Session 2.1 Session 定义 2.2 构造函数 2.2.1 ResourceManager 2.2.1.1 接口 2.2.1.2 Core 2.2.1.3 拓展 0x03 Parser 3.1 定义 3.2 如何组织网络 3.2.1 输入…
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 0x00 摘要 0x01 回顾 0x02 数据集 2.1 Norm 2.1.1 数据文件 2.1.2 文件列表 2.2 Raw 2.3 Parquet 0x03 CSR 格式 3.1 什么是CSR 3.2 HugeCTR 之中的CSR 3.3 操作类 3.3.1 定义 3.3.2 构造函数 3.3.3 生成新行 3.3.4 插入数据 0…
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (4) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (4) 0x00 摘要 0x01 总体流程 0x02 DataReader 2.1 定义 2.2 构建 2.3 DataReaderSparseParam 2.3.1 定义 2.3.2 使用 0x03 DataReader Buffer 机制 3.1 比对 3.2 Buffer 相关类 3.3 DataReader构造 3.3.1 辅助 G…
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (6) --- Distributed hash表 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (6) --- Distributed hash表 0x00 摘要 0x01 简述 1.1 基类 1.2 功能 0x02 定义 2.1 思路 2.2 代码 0x03 HashTable 3.1 定义 3.2 HashTableContainer 3.3 调用 3.4 concurrent_unor…
[源码解析] NVIDIA HugeCTR,GPU 版本参数服务器---(7) ---Distributed Hash之前向传播 目录 [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器---(7) ---Distributed Hash之前向传播 0x00 摘要 0x01 前文回顾 0x02 总体逻辑 2.1 注释&思路 2.2 总体代码 0x03 配置数据 3.1 CUB函数 3.1.1 cub::DeviceScan::InclusiveSum 3.1.2 cub::Dev…
[源码解析] NVIDIA HugeCTR,GPU 版本参数服务器---(8) ---Distributed Hash之后向传播 目录 [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器---(8) ---Distributed Hash之后向传播 0x00 摘要 0x01 回顾 0x02 总述 2.1 注释 2.2 代码 0x03 输入 3.1 定义 3.2 切换 0x04 backward 4.1 总体代码 4.2 AllGather 4.2.1 原理 4.2.2 代码 4.…