dubbo的介绍

dubbo是一个分布式的开源框架,其核心部分如下:
1、服务提供者:provider
2、服务消费者:consumer
3、注册中心:registry (仅仅只是负责通知)
服务者在注册中心中注册服务,在注册中心中进行管理,消费者通过注册中心去获取服务的地址,实现直接连接。 注册中心主要分为zookeeper、multicast、redis、simple四种。推荐使用zookeeper。
zookeeper:是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境
multicast:不能跨网络,使用范围比较小。
redis:是一个高效的KV存储服务器,服务时间需要同步。
simple: 只是简单实现,不支持集群,可作为自定义注册中心的参考,但不适合直接用于生产环境。

自己搭建简易的zookeeper

1、下载zookeeper的jar包
2、把zoo-sample.cfg重命名为zoo.cfg
3、在tomcat中web文件内配置dubbo-admin(端口50001)、dubbo-moniter(端口50002)插件来实现zookeeper的可视化
4、在dubbo-admin文件夹中的dubbo.properties配置注册地址、管理账号及密码等
5、因为dubbo会使用到8080端口,所以需要修改tomcat的端口号
6、最后启动zookeeper ,再启动tomcat即可

zookeeper的xml实现和api实现

1、xml的实现
a、注册中心
<dubbo:registry address="" id="" /> b、配置应用名
<dubbo:application name=" "/>   c、协议
<dubbo:protocol nama="协议名称" address="" port="20880" />
协议分为 dubbo(NIO单一长连接)、KMI(基于TCP)、Hessian(基于http) ,一般使用dubbo作为协议。 d、服务端
<dubbo:provided registry="" id=""/> (全局)
<dubbo:service ref="" interface ="" /> (接口)
<dubbo:service method=""/> (方法) e、客户端
<dubbo:reference interface=""/> 2、api的实现
a、提供者: ApplicaitonConfig ac = new ApplicaitonConfig()
ac.setName("");等 设置一些属性
b、连接注册中心的配置: RegistryConfig
c、服务端提供者:ProtocolConfig
d、服务提供者暴露服务:ServiceConfig sc
sc.export();
f、消费者:RefireeConfig rf
rf.get();

dubbo的超时、重连机制

超时:一般在服务端上配置timeout属性,指定超时时间,若超时时间一过,服务端没有返回则认为本次调用失败则会触犯重连机制。
重连机制:一般默认发生2次重连。重试机制在出现调用失败时,会再次调用。如果在配置的调用次数内都失败,则认为此次请求异常,抛出异常。 相关属性:timeout:设置超时时间、retries:设置重连次数
重连机制类型:根据不同业务选择
retries:失败后直接重试 (在查询时使用,同时发出三次消息请求,采用最快的那一次请求)
failfast:快速失败,有一次失败就直接显示失败,不会发生重连 (在插入时使用)
failback:重连置于队列中,过一段时间后再重新使用(在消息队列中使用较多) retries的优化:
1、使用幂等,在提交的时候设置事务锁,限制其在一个时间段内只能有一个使用,多用于并发的情况
2、在数据库中使用唯一键,操作较为简单,但会影响数据库效率。 优先级:方法 > 接口 > 全局

问题总结:

1、dubbo协议的长连接和短链接区别
长连接是指连接成功后不会断开的链接;短连接是指连接成功后发送完数据后会断开连接。 2、port端口的作用
类似于程序方法的入口,在dubbo中只有服务端才有端口,客服端是不需要配置端口,而且端口为20880. 3、四种注册中心的区别优势:
zookeeper: 是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境
multicast 不能跨网络,使用范围比较小。
redis: 是一个高效的KV存储服务器,服务时间需要同步。
simple: 只是简单实现,不支持集群,可作为自定义注册中心的参考,但不适合直接用于生产环境。 4、为什么不是用api的方式实现zookeeper
因为我们在开发的时候,会分为开发环境和测试环境,如果使用api方式来实现的话需要编写两套api,而xml的配置会方便很多。 5、为什么客户端调用的时候不需要具体的实现类,而只要注入接口就可以使用呢?
客户端调用的时候实际会根据接口生成一个spring bean实例,作为代理处理Dubbo请求,
然后其他要调用处直接使用spring bean的方式使用这个实例即可 6、超时的配置原因
防止程序的假死状态,避免撑爆dubbo 7、timeout属性指的是什么
zookeeper只相当于一个通知的中介,在客户端来访问的时候,负责给予相应的服务端地址,在服务端地址发生改变的时候,负责通知客户端。
服务端和客户端在里面其实是直连的,故需要一定的连接相应时间,这个时间值的最大超时时间就是timeout属性。

学习参考链接

Dubbo官网

Dubbo与Zookeeper、SpringMVC整合使用

Dubbo注册中心

dubbo+zookeeper+dubboadmin环境搭建


【Dubbo学习】的更多相关文章

  1. Dubbo学习小记

    前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境. 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是 ...

  2. dubbo学习(zz)

    dubbo学习 博客分类: 开源软件   Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站 ...

  3. Dubbo学习(六) dubbo 架构图 以及调用过程

    一.Dubbo结构图   duubo结构图 我们解释以下这个架构图:Consumer服务消费者,Provider服务提供者.Container服务容器.消费当然是invoke提供者了,invoke这条 ...

  4. Dubbo学习(一) Dubbo原理浅析

    一.初入Dubbo Dubbo学习文档: http://dubbo.incubator.apache.org/books/dubbo-user-book/ http://dubbo.incubator ...

  5. dubbo学习小结

    dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...

  6. Dubbo学习系列之十三(Mycat数据库代理)

    软件界有只猫,不用我说,各位看官肯定知道是哪只,那就是大名鼎鼎的Tomcat,现在又来了一只猫,据说是位东方萌妹子,暂且认作Tom猫的表妹,本来叫OpencloudDB,后又改名为Mycat,或许Ca ...

  7. Dubbo学习系列之八(分布式事务之MQ方案)

    自从小王玩起了微服务,发现微服务果然很强大,好处真是太多,心中暗喜,然而,却也遇到了分布式中最棘手的问题:分布式事务.小王遍访各路神仙,也无个完美开源解决方案,当然,也有些实际可行的手法,虽不算完美, ...

  8. Dubbo学习系列之九(Shiro+JWT权限管理)

    村长让小王给村里各系统来一套SSO方案做整合,隔壁的陈家村流行使用Session+认证中心方法,但小王想尝试点新鲜的,于是想到了JWT方案,那JWT是啥呢?JavaWebToken简称JWT,就是一个 ...

  9. Dubbo学习系列之十五(Seata分布式事务方案TCC模式)

    上篇的续集. 工具: Idea201902/JDK11/Gradle5.6.2/Mysql8.0.11/Lombok0.27/Postman7.5.0/SpringBoot2.1.9/Nacos1.1 ...

  10. Dubbo学习系列之十六(ELK海量日志分析框架)

    外卖公司如何匹配骑手和订单?淘宝如何进行商品推荐?或者读者兴趣匹配?还有海量数据存储搜索.实时日志分析.应用程序监控等场景,Elasticsearch或许可以提供一些思路,作为业界最具影响力的海量搜索 ...

随机推荐

  1. 登录页面jsp跳转到另一个jsp 与jsp-Servlet-jsp

    登录页面jsp 到另一个jsp,与jsp-Servlet-jsp  都是可以从表单提交参数信息. 但是jsp-jsp ,只能通过<%=request.getParameter("use ...

  2. Redis 补充

    Redis 补充 Redis 的主要用途 数据库 缓存和消息中间件 相当于一个字典 数据库切换 select 1 (默认36个数据库 默认在0) 1 基本数据类型 字符串 散列 hashes 列表 集 ...

  3. Js中分号使用总结

    作者:尤雨溪链接:https://www.zhihu.com/question/20298345/answer/49551142来源:知乎著作权归作者所有,转载请联系作者获得授权. 没有应该不应该,只 ...

  4. 剑指Offer面试题:8.二进制中1的个数

    一 题目:二进制中1的个数 题目:请实现一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 二 可能引起死循环的解法 // 计算整数的二 ...

  5. bzoj 2770 YY的Treap

    Written with StackEdit. Description 志向远大的\(YY\)小朋友在学完快速排序之后决定学习平衡树,左思右想再加上\(SY\)的教唆,\(YY\)决定学习\(Trea ...

  6. 转载Verilog乘法器

    1. 串行乘法器 两个N位二进制数x.y的乘积用简单的方法计算就是利用移位操作来实现. module multi_CX(clk, x, y, result); input clk; input [7: ...

  7. LA3263 That Nice Euler Circuits

    题意 PDF 分析 欧拉定理:设平面内顶点数.边数.面数分别为\(V,E,F\),则\(V+F-E=2\). 枚举每对线段求交点,注意去重. 另外注意第n个端点和第一个端点重合. 时间复杂度\(o(T ...

  8. webpack新版本4.12应用九(配置文件之configuration)

    配置 查看原文|编辑此页 webpack 是需要传入一个配置对象(configuration object).取决于你如何使用 webpack,可以通过两种方式之一:终端或 Node.js.下面指定了 ...

  9. Dawn 阿里开源前端开发构建工具

    Dawn 取「黎明.破晓」之意,原为「阿里云·业务运营团队」内部的前端构建和工程化工具,现已完全开源.它通过pipeline 和 middleware 将开发过程抽象为相对固定的阶段和有限的操作,简化 ...

  10. Maven项目合并

    当多个项目之间有关联.依赖jar包有重复时,可以考虑进行合并.举例,我一开始有一个test-pilling项目,pom文件如下: <project xmlns="http://mave ...