Dubbo实践(十七)telnet】的更多相关文章

telnet的介绍可以参看<java网络编程3>中有一段介绍telnet,我们可以理解为,telnet命令是通过socket协议与服务器端通信.Dubbo提供了telnet命令去查看服务功能. 这里主要介绍一下dubbo实现telnet命令的整体实现: } else if (message instanceof String) { if (isClientSide(channel)) { Exception e = new Exception("Dubbo client can no…
根据上一小节对于spring扩展schema的介绍,大概可以猜到dubbo中相关的内容是如何实现的. 再来回顾Dubbo实践(一)中定义的dubbo-provider.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3…
先回顾Dubbo实践(一)中定义的dubbo-provider.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context=&qu…
Dubbo 整体介绍 Dubbo 是一款高性能,轻量级的 Java RPC 框架.虽然它是以 Java 语言来出名的,但是现在我们生态里面已经有 Go.Python.PHP.Node.JS 等等语言.在 GitHub 上,https://github.com/dubbo下面已经有很多生态相关的东西. Dubbo 是一个 RPC 框架,它和所有的 RPC 一样,有一个最小运行子集,它需要 Provider.Consumer,以及一个服务注册发现相关的东西,在 Spring Cloud 里面是叫服务…
最近公司准备重构内部服务模块,准备使用dubbo,故研究一下. 官方文档:http://alibaba.github.io/dubbo-doc-static/Home-zh.htm 1. 用maven创建一个项目(父模块),将src目录删除: mvn archetype:generate -DgroupId=com.winter.dubbo -DartifactId=dubbo-parent -DarchetypeArtifactId=maven-archetype-quickstart -Di…
注意的地方 默认情况下,cluster=failover.retries=2,意为失败重试两次,不包含原生调用.如需配置不重试,需设置retries=-1,或者使用failfast(快速失败)模式 如果Dubbo接口嵌套Dubbo接口,比如A程序调用B接口,B接口实现中调用C接口.如果按默认重试2次,全部调用失败情况下,最终调用C接口3 * 3 = 9次.我们在Dubbo接口嵌套情况下一般设置为不重试 配置覆盖的规则:(1)方法配置优先级大于接口配置:(2)消费端配置优先级大于提供端配置.规则思…
Dubbo作为一个分布式的服务治理框架,提供了集群部署,路由,软负载均衡及容错机制.下图描述了Dubbo调用过程中的对于集群,负载等的调用关系: 集群 Cluster 将Directory中的多个Invoker伪装成一个Invoker,对上层透明,包含集群的容错机制. Cluster接口定义: /** * Cluster. (SPI, Singleton, ThreadSafe) * <p> * <a href="http://en.wikipedia.org/wiki/Com…
Refer取得invoker的过程 <!-- 指定了哪种的注册中心,是基于zookeeper协议的,指定了注册中心的地址以及端口号 --> <dubbo:registry protocol="zookeeper" client="zkclient" address="localhost:2181"/> <!-- 引用远程DemoService服务 --> <dubbo:reference id="…
Export发布服务流程 Dubbo协议向注册中心发布服务:当服务提供方,向dubbo协议的注册中心发布服务的时候,是如何获取,创建注册中心的,如何注册以及订阅服务的,下面我们来分析其流程. 看如下配置发布服务: <!-- 指定了哪种的注册中心,是基于zookeeper协议的,指定了注册中心的地址以及端口号 --> <dubbo:registry protocol="zookeeper" client="zkclient" address=&quo…
Spring在启动Dubbo服务端应用时,会实例化ServiceBean<T>并设置配置属性,然后调用export方法: @SuppressWarnings({"unchecked", "deprecation"}) public void afterPropertiesSet() throws Exception { // 设置一揽子provider属性 ...... if (!isDelay()) { export(); } } 此后调用的是Serv…
Spring在启动Dubbo客户端应用时,会实例化ReferenceBean<T>并设置配置属性,然后调用ReferenceConfig中的get方法: public synchronized T get() { if (destroyed) { throw new IllegalStateException("Already destroyed!"); } if (ref == null) { init(); } return ref; } private void in…
默认协议的rpc 过程是比较复杂的,其中涉及到了各个方面,其余各协议实际上有对这个过程进行简化:因此看懂了默认协议的rpc 过程,其他协议就非常容易懂了.在讲Dubbo通信过程之前,可以先了解:Java 远程通讯可选技术及原理 通信过程 我们可以通过如下7 点分析RPC 通信过程: 是基于什么协议实现的? 怎么发起请求? 怎么将请求转化为符合协议的格式的? 使用什么传输协议传输? 响应端基于什么机制来接收请求? 怎么将流还原为传输格式的? 处理完毕后怎么回应? 此时我们用默认协议来分析: 是基于…
Invoker调用 代理有几种方式:普通代理.JDK.Javassist库动态代理.Javassist库动态字节码代理. 生成代理的目的是你调用invoker的相关函数后,就等同于是调用DubboInvoker中的相关函数,也就是将本地调用转为网络调用并获得结果. // create service proxy return (T) proxyFactory.getProxy(invoker); private static final ProxyFactory proxyFactory = E…
ExtensionLoader.java中注意到injectExtension函数是为了设置所生成的对象的field:其方法为对于有set函数的field进行设置.此时用到了ExtensionFactory:说白了ExtensionFactory就是根据类型和名字来获取对象. 下面我们来看看ExtensionFactory是如何根据类型和名字来获取对象的,ExtensionFactory也是基于dubbo的spi扩展机制的. /** * SpiExtensionFactory */ public…
Filter Filter是Dubbo里面非常重要的模块,Dubbo里面日志记录.超时等功能都是在这一部分实现. 如上一节在介绍扩展点加载时所述,在生成Protocol的invoker时,实际上使用了装饰模式,第一个是filter,第二个是listener. 我们先来看filter,具体ProtocolFilterWrapper类: /** * ListenerProtocol */ public class ProtocolFilterWrapper implements Protocol {…
与JDK的SPI机制类似,Dubbo也在META-INF路径下定义了多种扩展接口.只是JDK SPI机制是Java后台帮你实现读取文件并对接具体的实现类,而Dubbo是自己去读文件. 扩展点配置 扩展点机制有几个要点: 1. 根据关键字去读取配置文件,获得具体的实现类 比如在dubbo-provider.xml文件中配置: <dubbo:protocol name="dubbo" port="20880" /> 则会根据dubbo去读取具体的协议实现类D…
Dubbo框架在初始化和通信过程中使用了多种设计模式,可灵活控制类加载.权限控制等功能. 工厂模式 Provider在export服务时,会调用ServiceConfig的export方法.ServiceConfig中有个字段: private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension(); Dubbo里有很多这种代码.这也是一种…
整体设计 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口: 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI: 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类: 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承…
架构 节点角色说明 节点 角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和调用时间的监控中心 Container 服务运行容器 调用关系说明 服务容器负责启动,加载,运行服务提供者: 服务提供者在启动时,向注册中心注册自己提供的服务: 服务消费者在启动时,向注册中心订阅自己所需的服务: 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给…
dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求. 下面将介绍如何搭建一个简单的示例程序(用maven构建). 众所周知,RPC调用涉及到消费者.提供者和接口,所以需要在maven工程warehouse-component-parent里面新建3个模块,分别是warehouse-component-dub…
https://mp.weixin.qq.com/s/9rVGHYfeE8yM2qkSVd2yEQ…
dubbo作为一个远程调用框架,虽与同类型的框架,不知道谁优谁劣,但是就公司层面使用来说,还是很棒的.这里简单的写一下怎么使用和调试技巧,就算是作个使用总结吧,供快速使用和问题解决! dubbo是基于spring做配置使用的,虽也提供其他方法,但是比较麻烦,所以使用spring还是有好处的吧. 先来一个整体架构图,这对于了解其是如何工作的是很有必要的.(比如我当初就误以为dubbo会做一个服务转发,好尴尬) 下面是一个更完整架构图,可以更清晰的看到软件是如何工作的: (以下是官方说明,我觉得很有…
一.telnet的作用 当dubbo服务(即生产者)发布之后,我们可以通过telnet命令来来进行调试和管理,以及跟踪服务调用的次数. 注意:2.0.5以上版本服务提供端口支持telnet命令,协议一定要是dubbo协议才可以使用命令. 二.telnet命令的使用 1.ls命令 1).连接到dubbo服务:telnet ip port 2).查看发布的服务: ls 3).查看发布服务的详细列表: ls -l 4).查看指定服务的方法列表:ls 服务名 5).查看指定服务的方法的详细信息:ls -…
个人博客地址 studyidea.cn,点击查看更多原创文章 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态.服务恢复之后,我们需要修复这笔数据至正常状态,怎么办? 如果仅是简单的服务,涉及少量数据变更,我们可以直接使用 SQL,变更数据状态.但是有些情况下,服务需要联动调用其他系统,变更其他系统数据.这种情况下,变更数据非常麻烦,需要与其他系统开发沟通,整理数据,一起变更.如果涉及还涉及外部系统,数据变更几乎玩不下去了. 如果服务接口能重试,重…
Dubbo是阿里多年前开源的一套服务治理框架,在众多互联网企业里应用广泛.本文介绍了一些如何监控与管理dubbo服务.使用的工具与<dubbox 的各种管理和监管>大致相同,本文更侧重于命令细节与实践. 首先参考<服务治理框架dubbo上手指南>,实现自己的HelloService服务.在此基础上运行Provider.java启动服务,接下来就可以开始管理工作啦.让我们来下载dubbo的源码并安装: 1 2 3 git clone https://github.com/alibab…
前言 这里普及一下,每个公司都有职别定级系统,阿里也是,技术岗以 P 定级,一般校招 P5, 社招 P6 起.其实阅读源码也是有很多诀窍的,这里分享几点心得: 首先要会用.你要知道这个库是干什么的,掌握它基本的使用方法: 有目的性.针对某个功能有目的的去挖掘,这样就不会在茫茫源码中迷失方向: 不需要看完所有细节.有的人阅读源码爱钻牛角尖,非要把每一个小细节都搞清楚,以至于看了一天可能都没看明白主干是什么. 阅读源码确实不简单,但是不要着急,从简单的源码开始,慢慢提升,学会抽丝剥茧,层层递进,逐渐…
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分析4-基于netty的dubbo协议的server dubbo源码分析5-dubbo的扩展点机制 dubbo提供了telnet的方式,直接用命令查看服务信息等.怎么实现的呢. 1. 编解码器 com.alibaba.dubbo.remoting.transport.netty.NettyCodecA…
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 与其纠结,不如行动学习.Innovate ,And out execute ! 』 本文提纲一.前言二.applications.properties 配置清单三.@Service 服务提供者常用配置四.@Reference 服务消费者常用配置五.小结 运行环境:JDK 7 或 8.Maven 3.0+技术栈:SpringBoot 1.5+..Dubbo 2.5+ 一.前言 在泥瓦匠出…
1. 打开命令窗口,telnet IP地址 dubbo端口号 telnet 127.0.0.1 28001 2. 找到service ls 列出所有服务 dubbo>cd com.faaaaa.rbbbb.api.service.ValidateCodeService  进入服务 3. 调用方法 dubbo>invoke sendSMValidateCode({}) a. 如果参数都是字符串,直接传字符串 b. 如果参数有字符串和其他类型,需要把字符串包装成json对象 c. 如果参数是对象,…
本文主要说明点 概述 背景 需求 架构 Dubbo源代码项目结构 概述 分享 Dubbo 的项目结构 ,通过本文可以大致了解到Dubbo整个项目的结构 背景 将一个项目进行拆分, 进行分布式架构. 需要解决下面的问题 单一应用架构 网站流量少时单一架构,简化开发.此时,用于简化增删改查工作量的数据访问框架(ORM)是关键. 垂直应用架构 访问大时单一应用速度过小,需要进行应用拆分.此时,用于加速前端页面开发的Web框架(MVC)是关键. 分布式服务架构 当垂直应用过多,将核心业务独立服务.然后提…