【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集群,中国电信的话 ...
随机推荐
- wx:for类表渲染
列表渲染 wx:for 在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件. 默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item < ...
- EF6学习笔记(六续) 复杂数据模型建表测试
测试以下几种模型关系: 1对1或0 . 1对多 . 多对多 1 对 1 或 0 如果直接定义两个模型,相互直接增加导航属性,会提示错误,必须为这个对应关系设定主副关系: public class ...
- 关于esp32的系统初始化启动过程及设计学习方法
对于esp32,其开发程序中有且只能有一个app_main函数,该函数是用户程序的入口,这在没有调用FreeRTOS的系统中相当于函数main,但其实在app_main之前,系统还有一段初始化的过程, ...
- js-function复制变量值和传递参数
<title>function复制变量值</title></head><body> <script> var a={ num:10 } // ...
- 发现一个好玩的东西 Web Scraper
是一个 Chrome 的扩展程序,机智的小爬虫
- js内存空间的那点事
由于js具有自动垃圾回收机制,导致接触js后一直没去关注js的内存分配及变量回收等原理,只是懵懂的了解用变量标记法(null)可以手动的去清除或是回收:是时候弥补这个大坑了... 垃圾回收两种方法 一 ...
- HTML+CSS实现页面豆腐块布局和图片居中
<!DOCTYPE html> <html> <head lang="en"> <meta http-equiv="Conten ...
- 导入Excel文件
选择文件 #region //获取路径 string FilePath = ""; //选择文件 OpenFileDialog openFileDialog1 = new Open ...
- RabbitMQ常见错误1
java.lang.IllegalStateException: Invalid configuration: 'exchange' must be non-null. at com.rabbitmq ...
- python 输出“Hello, world”
目的:制作第一个项目,输出“Hello, world” 首先查看自己电脑上的python版本号,方法打开cmd输入python 如果提示:不是内部或外部命令,也不是可运行的程序或批处理文件.那么需要设 ...