zoukankan      html  css  js  c++  java
  • Dubbo的基本介绍及使用

    一,前言

    ​ 在面对新技术新事物的时候,我们首先应该了解这是一个什么东东,了解为什么使用这门技术,如果我们不使用又会有什么影响。比如,本篇博客介绍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的使用仍有很多功能。由于个人能力有限,因而在该文章中如有不恰当之处,还请各位大牛留言指点,感谢阅读!

  • 相关阅读:
    dpkg install command
    Notes: GitHub, CA errors and old curl's
    幫倒忙的IE8 JSON.stringify()
    Connect High quality middleware for node.js
    MVC3, jQuery and JSON.stringify
    Scraping the Dynamic Web with PhantomJS: Using jQuery and Node: James Morrin: 9781449321864: Amazon.com: Books
    FAQ’S Ultimate Web Scraping
    How Yottaa Brings Site Speed,
    Node入门 » 一本全面的Node.js教程
    用Meteor框架快速搭建高质量互联网应用
  • 原文地址:https://www.cnblogs.com/fenjyang/p/11252241.html
Copyright © 2011-2022 走看看