博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dubbo基础知识整理
阅读量:3887 次
发布时间:2019-05-23

本文共 2249 字,大约阅读时间需要 7 分钟。

项目中第一次遇到dubbo时一脸懵逼,找了半天也没找到服务的调用者,哦原来是个rpc调用,在网关层配置调用哪个consumer接口,然后consumer再调用不同的provider的接口,随后零散的整理一些自己能理解的dubbo知识,现做记录。

Dubbo

dubbo是什么?是一款开源的高性能RPC分布式服务框架,实现了面向接口代理的RPC调用、服务注册和发现、负载均衡、容错和扩展性等(阿里开源的,已成为阿帕奇基金孵化项目)。

dubbo的特点和优点

dubbo内部使用了 Netty、Zookeeper,保证了高性能和高可用性,使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,比如接入新的provider就可以快速的实现业务逻辑的变更(dubbo内部使用的是rpc通信,而 Spring Cloud 使用的是 http restful方式)。

分布式架构可以承受更大规模的并发流量

dubbo中的节点角色

provider:调用服务的提供方

consumer:调用远程服务的消费方(其本身也可能在网关层提供另一个服务)
registry:服务的注册与发现的注册中心,推荐使用zookeeper作为注册中心
monitor:统计服务的调用次数和调用时间的监控中心
container:服务运行容器(dubbo服务容器只是一个简单的main方法,加载一个spring容器 用于暴露服务)

dubbo核心配置有哪些

下面是一些平时项目中用到的:

dubbo:service 服务配置,配置接口路径,接口名,协议,bean等信息,示例:

//Imethod为提供的服务接口,供网关上配置调用,这里的协议为httpplus,而dubbo服务内部的协议为dubbo协议//项目中dubbo consumer也是一个provider,所以在其工程下也配置了一个service-provider.xml

dubbo:reference 引用配置,在consumer中配置,每一个provider都需要在这里配置一下引用,示例如下:

//reference中可配置provider路径,重试次数和超时时间等

dubbo:protocol 协议配置,比如在上面的dubbo:service中就配置了提供服务的协议

dubbo:registry 配置注册中心,示例如下:

//在service-consumer.xml中配置注册中心和地址

dubbo:application 消费方应用名,用于计算依赖关系,而不是匹配条件,比如项目中的consumer和provider都需要配置这个,就好比你是提供服务的provider,这是你提供的服务的应用名

dubbo:provider 提供方配置,项目中没有配置这一个,而是采用了consumer中配置dubbo:reference,在reference中就指定了不同的adapter对应的不同的provider中的方法,然后调用时使用不同的adapter来调用即可(服务中的调用provider是通过启动时初始化一个map,然后把不用的key和对应的provider实例put到map中,然后再consumer调用时使用)

dubbo:method 方法配置,在项目中是在service-consumer.xml中配置dubbo:reference时指定对应的provider method的,示例:

在provider中可以配置consumer端的属性有:

1)timeout:方法调用超时
2)retries:失败重试次数,默认重试 2 次
3)loadbalance:负载均衡算法,默认随机(这个项目中没有配置,默认随机分配)
4)actives 消费者端,最大并发调用限制

默认使用Netty通信框架

当一个服务接口有多种实现时怎么做

其实接触的项目就属于这种,同一种类型,但是多种实现,在consumer的配置reference中就会配置group,然后服务提供方在dubbo:service中指定相同的group就可以了(即服务提供方和消费方都指定同一个 group )

同步还是异步

dubbo默认是同步等待结果阻塞的,支持异步调用,但是项目中因为provider响应很快,所以使用的是同步,而且业务场景也不支持使用异步的

Dubbo如何优雅停机

Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行

Dubbo 服务暴露的过程

Dubbo 会在 Spring 实例化完 bean 之后,在刷新容器最后一步发布 ContextRefreshEvent 事件的时候,通知实现了 ApplicationListener 的 ServiceBean 类进行回调 onApplicationEvent 事件方法,Dubbo 会在这个方法中调用 ServiceBean 父类 ServiceConfig 的 export 方法,而该方法真正实现了服务的(异步或者非异步)发布

从下图可以大概看出来,服务提供者和消费者在开始阶段都会进行初始化,将其暴露给其他服务调用

在这里插入图片描述

转载地址:http://xvphn.baihongyu.com/

你可能感兴趣的文章
JAVA人事管理系统
查看>>
Dubbo面试题(关注小R持续更新)
查看>>
JAVA仿微博系统(JAVA毕业设计含源码和运行教程)
查看>>
24BITBMP位图的文件结构及创建
查看>>
如何在自定义控件中获得width和height?
查看>>
Android UI开发专题之界面设计【基础API】
查看>>
ejarmaker: jar 、java类的加密工具
查看>>
配置NFS实现Linux服务器之间的文件共享
查看>>
PostgreSQL连接池pgbouncer的使用
查看>>
Kryo序列化进阶学习: 加密数据
查看>>
swift 3.0 数组赋值
查看>>
用C#通过888-TT打印中文标签
查看>>
sendmail 出现 My unqualified host name的解决办法
查看>>
彻底解决lazarus安装组件后烦人的编译时单元找不到的问题!
查看>>
Delphi的参数修饰const/var/output 与C++的对应关系
查看>>
C++ free与delete区别
查看>>
VC的字符串转换atlconv的使用
查看>>
Twitter的分布式自增ID算法snowflake (Java版)
查看>>
阻抗测量基础
查看>>
天线设计相关性能参数
查看>>