【Dubbo&&Zookeeper】5、dubbo总结和学习资料汇总
Dubbo学习资料
RPC介绍
什么是RPC?
RPC(Remote Procedure Call)远程过程调用。见名知意 - 从远程主机调用一个过程/函数。
RPC的目标是:使得本程序调用其它远程主机上的函数,好像调用本程序内的函数一样简单,并且屏蔽编程语言的差异性。
要实现上述目标首先是设计一种通讯协议,称之为:RPC协议(Protocol)- RPC协议不是一个具体的协议,而是一个类型名,代表一类协议,这类协议叫做RPC协议;
- RPC协议在TCP/UDP之上,广义上可以跨越平台、语言进行应用间通讯(说广义是因为可以开发一个协议且不支持跨语言);
为什么要用RPC?
其实这是应用开发到一定的阶段的强烈需求驱动的。如果我们开发简单的单一应用,逻辑简单、用户不多、流量不大,那我们用不着;
当我们的系统访问量增大、业务增多时,我们会发现一台单机运行此系统已经无法承受。此时,我们可以将业务拆分成几个互不关联的应用,分别部署在各自机器上,以划清逻辑并减小压力。此时,我们也可以不需要RPC,因为应用之间是互不关联的。
当我们的业务越来越多、应用也越来越多时,自然的,我们会发现有些功能已经不能简单划分开来或者划分不出来。此时,可以将公共业务逻辑抽离出来,将之组成独立的服务Service应用 。而原有的、新增的应用都可以与那些独立的Service应用 交互,以此来完成完整的业务功能。所以此时,我们急需一种高效的应用程序之间的通讯手段来完成这种需求,所以你看,RPC大显身手的时候来了!
其实
#3描述的场景也是服务化 、微服务 和分布式系统架构 的基础场景。即RPC框架就是实现以上结构的有力方式。有哪些RPC?
有很多RPC框架:CORBAR、Thrift、Dubbo等等。基本上他们分为两种类别:- 一种是跨语言的;
- 一种是同语言的,如果你的分布式应用架构主体都是Java应用,显然我们不应该使用跨语言的RPC来多一层中转浪费效率。
就Java来说,我认为其本身API提供的
RMI就是一种RPC协议,但是其毕竟太原始,需要自己去添加很多机制才能上生产环境。所以,今天介绍下我最近使用的Dubbo框架。
dubbo常用配置总结
1、关闭启动时检查
Dubbo默认会在启动时检查依赖的服务是否可用,不可用会抛出异常,阻止Spring初始化完成。如果对有些服务不关心,或者出现了循环依赖,必须有一方先启动时,可以关闭启动时检查。方式如下:
<dubbo:reference interface="com.xxx.XxxService" check="false" />
2、引用默认还是延迟初始化的,只有引用被注入到其它Bean,或者被getBean()获取时,才会初始化。如果需要饥饿加载,即Dubbo启动时就立即生成动态代理实例,则可以配置:
<dubbo:reference interface="com.xx.XxxService" init="true" />
3、给dubbo接口添加白名单——dubbo Filter的使用
4、有时候你的服务在本地开发测试时需要注册到注册中心,但又没有完全做完的时候,如果就这样注册上去,其他消费者在调用该服务时,就会偶尔的调用到你本地的服务,这样就报错了。
<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}" register="false"/>
在<dubbo:registry >最后添加register="false",这样别人就不会调你的本地服务,但你的本地服务所订阅的服务正常运行。
5、直连提供者
开发测试环境下,需要绕过注册中心,直接测试服务提供者
<dubbo:reference interface="com.changhf.service.DeptmentService" id="deptmentService" check="false" url="dubbo://192.168.1.1:20881"/>
serviceImpl里加个断点,每次访问都会走断点。在管控台本地服务接口最后点击禁用,还是可以正常访问,说明绕过了注册中心。
6、服务分组,可实现服务的稳步升级
<dubbo:service interface="com.changhf.service.IDubboGroupService" ref="dubboGroup1Service" group="feedback2"/>
<dubbo:reference interface="com.changhf.service.IDubboGroupService" id="dubboGroup1Service" check="false" group="feedback2"/>
group属性为该服务接口添加一个分组,消费者就只会调用同一分组的服务接口了。
也可以用version属性来替代:
<dubbo:service interface="com.changhf.service.DeptmentService" ref="deptmentService" version="2.0"/>
<dubbo:reference interface="com.changhf.service.DeptmentService" id="deptmentService" check="false" version="2.0"/>
【Dubbo&&Zookeeper】5、dubbo总结和学习资料汇总的更多相关文章
- 【转】iOS超全开源框架、项目和学习资料汇总
iOS超全开源框架.项目和学习资料汇总(1)UI篇iOS超全开源框架.项目和学习资料汇总(2)动画篇iOS超全开源框架.项目和学习资料汇总(3)网络和Model篇iOS超全开源框架.项目和学习资料汇总 ...
- d3可视化实战00:d3的使用心得和学习资料汇总
最近以来,我使用d3进行我的可视化工具的开发已经3个月了,同时也兼用其他一些图表类库,自我感觉稍微有点心得.之前我也写过相关文章,我涉及的数据可视化的实现技术和工具,但是那篇文章对于项目开发而言太浅了 ...
- iOS超全开源框架、项目和学习资料汇总--数据库、缓存处理、图像浏览、摄像照相视频音频篇
iOS超全开源框架.项目和学习资料汇总--数据库.缓存处理.图像浏览.摄像照相视频音频篇 感谢:Ming_en_long 的分享 大神超赞的集合,http://www.jianshu.com/p/f3 ...
- springcloud学习资料汇总
收集Spring Cloud相关的学习资料 学习Spring Cloud首先需要了解Spring Boot,不了解Spring Boot的同学戳这里Spring Boot学习资料汇总 重点推荐:Spr ...
- Java 8 学习资料汇总【转载】
原文地址 2014年3月18日,Java SE 8 发布,而 Java 9 预期2016年发布: 2011年7月7日,Java 7 发布,是2009年4月20日被Oracle 以74亿美元收购首次推出 ...
- (zhuan) 深度学习全网最全学习资料汇总之模型介绍篇
This blog from : http://weibo.com/ttarticle/p/show?id=2309351000224077630868614681&u=5070353058& ...
- 转:python的nltk中文使用和学习资料汇总帮你入门提高
python的nltk中文使用和学习资料汇总帮你入门提高 转:http://blog.csdn.net/huyoo/article/details/12188573 nltk的安装 nltk初步使用入 ...
- redis学习资料汇总
redis学习资料汇总 2017年01月07日 22:10:37 阅读数:281 转载:http://blog.csdn.net/wtyvhreal/article/details/50427627 ...
- HBase全网最佳学习资料汇总
HBase全网最佳学习资料汇总 摘要: HBase这几年在国内使用的越来越广泛,在一定规模的企业中几乎是必备存储引擎,互联网企业阿里巴巴.百度.腾讯.京东.小米都有数千台的HBase集群,中国电信的话 ...
随机推荐
- 机器学习之KNN算法
1 KNN算法 1.1 KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属 ...
- AddTransient,AddScope和AddSingleton 有什么不同?
我们先来创建几个接口using System; namespace DependencyInjectionSample.Interfaces{ public interface IOperation ...
- 「PKUWC2018」随机游走(min-max容斥+FWT)
「PKUWC2018」随机游走(min-max容斥+FWT) 以后题目都换成这种「」形式啦,我觉得好看. 做过重返现世的应该看到就想到 \(min-max\) 容斥了吧. 没错,我是先学扩展形式再学特 ...
- Mac 下 Gradle 环境配置
1. gradle路径的查找 然后gradle 右键 显示简介 复制下蓝色的 2. 环境变量的配置 在.bash_profile文件中,添加如下图选中内容的配置信息: 执行source .bash_p ...
- Java中List, Integer[], int[]的相互转换
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Mai ...
- Android网络请求与数据解析,使用Gson和GsonFormat解析复杂Json数据
版权声明:未经博主允许不得转载 一:简介 [达叔有道]软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and me, we are family ...
- axios的Get和Post方法封装及Node后端接收数据
最近有做一个Vue的小项目,其中用到了尤大大推荐使用的axios,但是使用的过程中遇到了各种各样的问题,所以这次也是将一些心得分享出来. 安装的流程我就简单说一下下吧,在一个自己新建的文件夹中命令行中 ...
- Ubuntu16.04 + gtx1060 + cuda8.0 + cudnn5.1 + caffe + Theano + Tensorflow
参考 ubuntu16.04+gtx1060+cuda8.0+caffe安装.测试经历 ,细节处有差异. 首先说明,这是在台式机上的安装测试经历,首先安装的win10,然后安装ubuntu16.04双 ...
- 纯css实现不同方向的三角形
.triangle { position: relative; &:after { position: absolute; top: 50%; transform: translate(0,- ...
- jvm-class文件简介
jvm全称 java virtual machine (java虚拟机),也就是在计算机上再虚拟一个计算机,它存在于计算机内存中并运行在操作系统之上的. javap -v class文件名 > ...