文档章节

Dubbo深入学习了解

 最胖的瘦子
发布于 04/12 17:41
字数 878
阅读 13
收藏 1
  1. Dubbo的生产者需要配置dubbo service标签,这里面有几个核心参数要配置:
    1. Id名
    2. Interface 接口路径
    3. Ref 接口名
    4. Registry 注册zk上的地址
    5. Group分组
    6. Check 检查服务是否是可用的 默认check是true的,设置为true的话,默认服务在启动时,检查到不可用时会抛出异常,防止spring将服务加载进容器中,可以最快速的发现问题。。我们组的话在测试环境上一般会配置成false的
    7. Retries 超时尝试重连。Dubbo在超时后未配置的情况下,默认的重连次数是2次,我们的实际配置是0次
    8. Timeout,dubbo响应超时时间,这个根据实际业务情况设定,未设置的情况下默认是1000毫秒

 

  1. Dubbo的消费者需要配置dubbo reference标签,核心参数与生产端一致
  2. Dubbo默认是使用dubbo协议的,我们使用的也是dubbo协议,可以根据dubbo  protocol标签来配置切换协议。
    1. 链接个数:单链接
    2. 链接方式:长连接
    3. 传输协议:TCP
    4. 传输方式:NIO异步传输
    5. Dubbo适用于请求入参数据较小的情况,对于文件、超大字符串不建议使用
    6. Dubbo的消费者数量是远大于提供者的,此时通过NIO保证稳定(单一长连接防止阻塞)
  3. Dubbo的通信过程

首先我们已经知道了dubbo是采用socket长连接双工的模式来处理通信的,那从客户端发起请求,到远程服务端响应,这是一个异步的过程,这个过程是如何实现的呢

 

  1. 首先,客户端发起dubbo调用请求,此时呢dubbo会根据内置机制生成一个唯一的识别标识id
  2. 将调用信息(接口名称、入参、接口方法)以及callback相应信息全部封装成一个Object对象
  3. 将id和object放进一个全局的concurrentHashMap(客户端和服务端都在用)中的put方法中
  4. 然后再把这个id和Object封装成一个conRequest类,使用IOsession.write(conRequest)异步发送出去
  5. 然后客户端发完请求以后,会使用callback方法的get方法试图去获取远程服务端的响应结果,此时先要通过synchronized获取锁,然后开始检查是否有响应结果,如果没有的话,就通过wait方法,先把锁释放掉,让线程继续去等待
  6. ===============客户端的活动暂时到这,接下来开始服务端的表演=============
  7. 服务端开始处理业务逻辑,处理完以后,把处理结果放进Object对象里的callback中,然后通过id找到concurrentHashmap,把结果put进去。同时将结果回传给客户端
  8. 客户端是专门有一个监听消息的线程,当他监听到有结果返回时,使用synchronized获取回调对象callback的锁(因为前面调用过wait(),那个线程已释放callback的锁了),再notifyAll(),唤醒前面处于等待状态的线程继续执行(callback的get()方法继续执行就能拿到调用结果了)。

© 著作权归作者所有

粉丝 4
博文 34
码字总数 19079
作品 0
杭州
私信 提问
2016个人计划

================2015总结============================ 算完成了吧 1:找个女朋友 。。。 未完成 2:养好身体 未完成 未完成 3:深入了解java基础,看看jdk1.6,1.7的新特性,了解多线程,高...

有种下班别走
2016/02/16
6
0
ZooKeeper使用(1)- 简介

首先说下为什么要写ZooKeeper专题吧,从我工作到现在有三年左右的时间了,虽然从一工作就接触到了ZooKeeper,但是都还仅限于简单的配置使用,对于ZooKeeper服务还不甚了解,后来加上要做配置...

andamajing
2017/05/25
0
0
学习东西总结:

一.JAVA 基础 1、JAVA并发编程 2.JAVA NIO系列 3.JVM深入了解 4.JAVA性能优化相关研究 5.JAVA7,8新特性 二、数据库 1.数据库优化研究 2.MYSQL高可用性研究 3.MYSQL源码研究 三、网络 1.HTTP...

QH_C
2016/03/25
5
0
SpringBoot之SpringCloud体验

前言:很早就发现cloud微服务,一直没有尝试弄,今天花了点时间跑了一下demo,cloud远程调用是基于http rest风格调用的方式。感觉没有dubbo那么方便,远程调用像调用本地方法。因为我也是参考...

王念博客
2016/08/31
3.8K
0
JAVA开发高级工程师

1.精通Java语言,熟悉软件开发流程,熟悉常用项目构建工具Maven 2.3年以上电子商务/互联网系统开发经验,有大规模高并发访问的Web应用开发经验; 3. 开发过freemarker 模板者优先。熟练使用常...

wheather
2016/06/21
27
5

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
244
5
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
5
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
8
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部