Dubbo的基本介绍及使用
一,前言
在面对新技术新事物的时候,我们首先应该了解这是一个什么东东,了解为什么使用这门技术,如果我们不使用又会有什么影响。比如,本篇博客介绍Dubbo的基本使用,此时我们应该先要明白我为什么要使用Dubbo,它能帮我解决什么问题,不使用Dubbo又会如何。
关于Dubbo的相关术语,请参考Dubbo官网(支持中英): http://dubbo.apache.org
二,什么是Dubbo
Dubbo是一款分布式服务框架,为其提供高性能化和透明化的RPC远程调用的服务方案,致力于解决在SOA服务架构中的协调性。
通俗来说,就是在分布式项目架构中用于同一各个子模块之间的关系。我们都知道在分布式结构的模块中,每个模块单元之间都是相互独立的。那么又该如何将这些独立的模块之间相互联系调用,那么Dubbo服务框架就是用来解决该问题的,这也就是为什么要使用Dubbo框架。
其核心部分包含:
- 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
- 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
- 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo基本流程图如下(Zookeeper为Dubbo默认的注册中心):

三,Dubbo原理分析
dubbo架构如图所示(官网原图):

图中节点说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
执行的顺序:
0,先启动生产者;
1,生产者将自己启动的消息报告给注册中心;
2,消费者启动,通知注册中心;
3,注册中心通知消费者有生产者了;
4,消费者消费(调用方法);
5,产者和消费者将自己的调用信息和被调用信息发送监控中心;
注意:在启动项目时,要先启动生产者,并且在注册中心注册成功,才可以启动消费者并且调用成功。
四,Dubbo的使用
以上介绍了很多,但是阐述的也有些官方。那么接下来就直接上代码,并且将运行结果进行展示说明。
4.1 快速启动
Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展 进行加载。
如果不想使用 Spring 配置,可以通过 API 的方式 进行调用。
4.2 Demo运行环境
Dubbo框架以Zookeeper为注册中心,因而我们还应将zookeeper环境准备好。以该博客中demo为例(以下环境安装不再详述,网上有很多优秀的博客):
1,在Linux服务器中准备好zookeeper。
2,准备Tomcat服务器,将dubbo监控中心放置到tomcat的webapp下,直接启动。
dubbo监控中心:dubbo-monitor-simple是dubbo提供的简单监控中心,可以用来显示接口暴露,注册情况,也可以看接口的调用明细,调用时间等。
下载地址:https://github.com/apache/incubator-dubbo/releases
3,使用Spring Boot创建工程。
4.3 创建Demo
4.3.1 Demo工程结构如下:

4.3.2 springboot_provider工程如下:

在provider模块中引入dubbo依赖,及zookeeper依赖
<!-- dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.8</version>
</dependency>
<!-- zookeeper依赖 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
编写service层代码如下:
@Service
public class UserServiceImpl implements IUserService {
@Override
public User queryUser() {
System.out.println("调用提供者provider");
return new User(1, "小明", 10);
}
到此还有一步,就是还要编写dubbo的配置属性。
<!-- 设置dubbo的名称 -->
<dubbo:application name="dubbo-provide"/>
<!-- 指定注册的服务中心 -->
<dubbo:registry protocol="zookeeper" address="192.168.120.56:2181"/>
<!-- 暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 注册服务 -->
<dubbo:service interface="com.yx.dubbo_service.service.IUserService" ref="userServiceImpl" retries="0" timeout="10"></dubbo:service>
此时就可以启动dubbo的提供者,打开之前安装好的dubbo监控中心。

如上图表示提供者已经注册在zookeeper上,并且显示没有消费者。
4.3.3 springboot_consumer工程结构如下:

消费者代码如下:
@Autowired
private IUserService userService;
@RequestMapping("/index")
public String index(){
System.out.println("controller被调用");
User user = userService.queryUser();
System.out.println("dubbo消费者为:" + user);
return "OK!!!!";
}
编写消费者dubbo配置属性:
<dubbo:application name="dubbo-consumer"/>
<dubbo:registry protocol="zookeeper" address="192.168.120.56:2181"/>
<!-- 引用服务 -->
<dubbo:reference id="userService" interface="com.yx.dubbo_service.service.IUserService" timeout="1000" />
启动消费者,dubbo监控中心显示:

当提供者和消费者都注册成功时,则显示正常。
最后通过浏览器访问controller层,控制台如图所示:

且浏览器页面显示如图:

五,总结
对于dubbo的基本使用就结束了,但这只是一个简单的入门介绍,dubbo的使用仍有很多功能。由于个人能力有限,因而在该文章中如有不恰当之处,还请各位大牛留言指点,感谢阅读!
Dubbo的基本介绍及使用的更多相关文章
- dubbo注册中心介绍
作者:微子Lee链接:https://www.jianshu.com/p/2f4cfb6ed048 Dubbo的注册中心有好多种,包括Multicast.Zookeeper.Redis.Simple等 ...
- RPC理论以及Dubbo的使用介绍
RPC 的主要功能目标是让构建分布式应用更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性. 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用. RP ...
- dubbo实现原理介绍
一.什么是dubbo Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看, ...
- dubbo的详细介绍
1.背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 2.架构 单一应用架构 当网站流量很 ...
- Dubbo框架入门介绍
背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只需一个 ...
- Linux 配置 dubbo 和 dubbo的简单介绍。
一.是么是 dubbo? 一.dubbo? 1.因为项目之间需要相互调用,达到某种预期的结果 1.1 restful? 门户网站必须要知道用户的登录状态,但是用户的登录状态在登录项目中,所以门户网站 ...
- dubbo框架的介绍,应用
http://www.cnblogs.com/Javame/p/3632473.html
- dubbo服务架构介绍
Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. Monitor: 统计服务的调用次数和调用时间的监控中心. ...
- [资料分享]dubbo视频教程流行版
一.基础篇 第001节–课程介绍 第01节–使用Dubbo对传统工程进行服务化改造的思路介绍 第02节–使用Dubbo对传统工程进行服务化改造 第03节–ZooKeeper注册中心安装 第04节–使用 ...
随机推荐
- Nginx正向代理和反向代理
关于代理 说到代理,首先我们要明确一个概念,所谓代理就是一个代表.一个渠道: 此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过 ...
- idea中的beautiful插件-自动生成对象set方法
1. 描述 从前端获取VO对象后,好多时候又要生成数据库对象,需要进行赋值,一个个写很浪费时间,介绍一款idea中的beautiful插件,代码开发过程中自动生成对象的set方法,很好用. 2 .插件 ...
- 如何进行高效的源码阅读:以Spring Cache扩展为例带你搞清楚
摘要 日常开发中,需要用到各种各样的框架来实现API.系统的构建.作为程序员,除了会使用框架还必须要了解框架工作的原理.这样可以便于我们排查问题,和自定义的扩展.那么如何去学习框架呢.通常我们通过阅读 ...
- TF项目实战(基于SSD目标检测)——人脸检测1
SSD实战——人脸检测 Tensorflow 一 .人脸检测的困难: 1. 姿态问题 2.不同种族人, 3.光照 遮挡 带眼睛 4.视角不同 5. 不同尺度 二. 数据集介绍以及转化VOC: 1. F ...
- 深入学习SpringMVC
1.什么是SpringMVC? SpringMVC是Spring框架内置的MVC的实现.SpringMVC就是一个Spring内置的MVC框架.MVC框架,它解决WEB开发中常见的问题(参数接收.文件 ...
- 反⑨baka拖更大队:临时约法
本团队中将不时发起团队讨论报道⑨baka无良~ 某无良⑨baka一直拖更引起广大人民群众不满 文文新闻:https://www.luogu.org/discuss/show/52654 反⑨baka的 ...
- GeoPackage - 一个简便轻量的本地地理数据库
GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件.与操作系统无关的地理数据库. 当前标准是1.2.1,该版本的html版说明书:https://www.geopackag ...
- 个人永久性免费-Excel催化剂功能第56波-获取Excel对象属性相关自定义函数
之前零散开发过一些自定义函数获取Excel对象属性,此次再细细地把有价值的属性都一一给开发完成,某些场景下,有这些小函数还是可以比较方便地实现一些通过Excel界面没法轻松获取到的信息. 修复与更新 ...
- SSM 框架集成
1.SSM是什么? SSM是指目前最主流的项目架构的三大框架: SpringMVC : spring的 Web层框架,是spring的一个模块 Spring :容器框架 MyBatis :持久层框架 ...
- 踩坑 Spring Cloud Hystrix 线程池队列配置
背景: 有一次在生产环境,突然出现了很多笔还款单被挂起,后来排查原因,发现是内部系统调用时出现了Hystrix调用异常.在开发过程中,因为核心线程数设置的比较大,没有出现这种异常.放到了测试环境,偶尔 ...