一,前言

​ 在面对新技术新事物的时候,我们首先应该了解这是一个什么东东,了解为什么使用这门技术,如果我们不使用又会有什么影响。比如,本篇博客介绍Dubbo的基本使用,此时我们应该先要明白我为什么要使用Dubbo,它能帮我解决什么问题,不使用Dubbo又会如何。

​ 关于Dubbo的相关术语,请参考Dubbo官网(支持中英): http://dubbo.apache.org

二,什么是Dubbo

​ Dubbo是一款分布式服务框架,为其提供高性能化和透明化的RPC远程调用的服务方案,致力于解决在SOA服务架构中的协调性。

​ 通俗来说,就是在分布式项目架构中用于同一各个子模块之间的关系。我们都知道在分布式结构的模块中,每个模块单元之间都是相互独立的。那么又该如何将这些独立的模块之间相互联系调用,那么Dubbo服务框架就是用来解决该问题的,这也就是为什么要使用Dubbo框架。

其核心部分包含:

  1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
  2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

​ 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的基本介绍及使用的更多相关文章

  1. dubbo注册中心介绍

    作者:微子Lee链接:https://www.jianshu.com/p/2f4cfb6ed048 Dubbo的注册中心有好多种,包括Multicast.Zookeeper.Redis.Simple等 ...

  2. RPC理论以及Dubbo的使用介绍

    RPC 的主要功能目标是让构建分布式应用更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性. 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用. RP ...

  3. dubbo实现原理介绍

      一.什么是dubbo Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,     ...

  4. dubbo的详细介绍

    1.背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 2.架构 单一应用架构 当网站流量很 ...

  5. Dubbo框架入门介绍

    背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只需一个 ...

  6. Linux 配置 dubbo 和 dubbo的简单介绍。

    一.是么是  dubbo? 一.dubbo? 1.因为项目之间需要相互调用,达到某种预期的结果 1.1 restful? 门户网站必须要知道用户的登录状态,但是用户的登录状态在登录项目中,所以门户网站 ...

  7. dubbo框架的介绍,应用

    http://www.cnblogs.com/Javame/p/3632473.html

  8. dubbo服务架构介绍

    Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. Monitor: 统计服务的调用次数和调用时间的监控中心. ...

  9. [资料分享]dubbo视频教程流行版

    一.基础篇 第001节–课程介绍 第01节–使用Dubbo对传统工程进行服务化改造的思路介绍 第02节–使用Dubbo对传统工程进行服务化改造 第03节–ZooKeeper注册中心安装 第04节–使用 ...

随机推荐

  1. Maxon Cinema 4D Studio R20.026 中文破解版下载

    Maxon Cinema 4D Studio,是 Maxon 公司开发的一款专业三维工具包,如果你需要一个得力助手,轻松快速创建令人称赞的 3D 图形作品,那么这是你的最佳选择. 为何使用Cinema ...

  2. .Net Core Api 授权认证

    一.所使用到的NuGet: 1. System.IdentityModel.Tokens.Jwt 2. Microsoft.AspNetCore.Authentication.JwtBearer 二. ...

  3. Nginx+vsftpd

    一.安装Nginx 关闭selinux和firewalld setenforce sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selin ...

  4. c++小游戏——职业战争

    #include<iostream> #include<cstdlib> #include<ctime> #include<cstring> #incl ...

  5. android值类型转换

    各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型. 字符串型转换成各种数字类型: String s = & ...

  6. 机器学习-EM算法

    最大期望算法 EM算法的正式提出来自美国数学家Arthur Dempster.Nan Laird和Donald Rubin,其在1977年发表的研究对先前出现的作为特例的EM算法进行了总结并给出了标准 ...

  7. golang 时间转换的问题

    一般在获取到时间字符串,需要将时间字符串格式化为golang的"time.Time"对象的时候,通常有2个函数,分别是. time.Parse(layout, value stri ...

  8. 或许是你应该了解的一些 ASP.NET Core Web API 使用小技巧

    一.前言 在目前的软件开发的潮流中,不管是前后端分离还是服务化改造,后端更多的是通过构建 API 接口服务从而为 web.app.desktop 等各种客户端提供业务支持,如何构建一个符合规范.容易理 ...

  9. rabbitMQ_workQueue(二)

    生产者发送多个消息到队列,由多个消费者消费.   如果一个消费者需要处理一个耗时的任务,那么队列中其他的任务将被迫等待这个消费者处理完成,所以为了避免这样的情况,可以建立对个消费者进行工作. 本例中使 ...

  10. Vue中beforeRouterEnter的应用

    一般判断从哪个页面进入时需要判断路由,用到了beforeRouteEnter方法. 注意:在在内部获取不到外部的this,方法.变量等都获取不到.但是vm.XXXXX可以获取到 beforeRoute ...