zoukankan      html  css  js  c++  java
  • 【Dubbo篇】--Dubbo框架的使用

    一、前述

    Dubbo是一种提供高性能,透明化的RPC框架.是阿里开源的一个框架。

    官网地址:http://dubbo.io/

    二、架构

    组件解释:

    Provider: 提供者.发布服务的项目.
    Registry: 注册中心.所有提供者必须去注册中心注册自己所有能发布的服务.
    Consumer: 消费者.调用服务的项目.
    Monitor: 监控中心.监控消费者和提供者调用服务的时间及次数.默认每1分钟向监控中心生成一次统计数据.之间调用必须遵守Dubbo支持的协议.
    Container:容器.Dubbo依赖于Spring容器.

    执行顺序:
    0:由Spring容器启动服务.
    1 向注册中心注册服务.
    2 消费者向注册中心订阅需要调用的服务.在注册中心的服务列表中寻找需要调用的服务.获取到提供者真实地址.
    3 注册中心通知消费提供者的真实地址.如果提供者的服务发生变化,注册中心会自动推送信息给消费者.
    4 消费者调用提供者的服务.
    5 在调用过程中向监控中心发送数据,进行统计调用时间和调用次数.
    6 虚线都是异步请求,实线都是同步请求.

    三、Dubbo支持的注册中心

    1.Zookeeper注册中心
    1.1 优点:支持集群.
    1.2 缺点:稳定性受Zookeeper影响.
    2.Redis注册中心
    1.1 优点:基于服务器双写模式.性能高.
    1.2 缺点:要求服务器时间必须一致.
    3.Multicast注册中心
    3.1 免中心化的注册中心,不需要额外安装软件.
    3.2 不支持集群.
    4.Simple注册中心
    4.1 适用于测试环境的.

    四、Dubbo支持的几种协议


    1. Dubbo
    1.1 基于NIO的协议.性能比较高
    1.2 缺点:在单一连接时,传输大文件可能出错.
    2.RMI
    2.1 RMI是JDK提供的.可以和原生RMI互用.
    2.2 缺点:可能出现连接无效情况.
    3.Hession
    3.1 第三方的Hession.jar
    3.2 缺点:短连接性能低.

    五、Zookeeper简介


    1.分布式协调组件(就是一个软件.)
    2.好处:
    2.1 高效性
    2.2 可扩展性.
    3.作用:
    3.1 服务发布和订阅(注册使用这个特性)
    3.2 集群管理功能(SolrCloud使用这个特性)
    3.3 负载均衡
    3.4 分布式锁
    4.使用java语言编写.


    六.使用Maven发布服务的步骤


    1.创建dubbo-service项目,只写接口
    2.创建dubbo-service-impl项目,需要依赖dubbo-service
    3.在pom.xml配置,导入dubbo.jar和zkClient.jar
    3.1 <exclusions>不导入哪个依赖包
    3.2 spring-context:我们使用的spring版本
    3.3 zkClient:连接Zookeeper的客户端工具包
    3.4 dubbo: dubbo框架的包

    <dependencies>
            <dependency>
                <groupId>com.bjsxt</groupId>
                <artifactId>dubbo-service</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.5.3</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.1.6.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.10</version>
            </dependency>
        </dependencies>

      4. 在resources下新建spring配置文件
      <beans>可以在dubbo-master.zipdubbo-master dubbo-admin srcmain esourcesMETA-INFspring里面复制

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd
            http://code.alibabatech.com/schema/dubbo 
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <!-- 在监控中心/admin管理界面中看是哪个项目 -->
        <dubbo:application name="dubbo-service-impl"/>
        <!-- 配置注册中心 -->
        <dubbo:registry protocol="zookeeper" address="192.168.92.130:2181"></dubbo:registry>
        <!-- 配置协议 -->
        <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
        <!-- 注解扫描 -->
        <dubbo:annotation package="com.bjsxt.service.impl"/>
    </beans>

    5.编写服务实现类

    5.1 @Service是Dubbo的注解

    import com.alibaba.dubbo.config.annotation.Service;
    import com.bjsxt.service.DemoService;
    
    @Service
    public class DemoServiceImpl implements DemoService {
        @Override
        public String test(String name) {
            return "传递过来的内容:"+name;
        }
    }

    七.使用Maven创建Consummer项目

     1.保证Consummer项目中服务方接口
    1.1 需要知道服务方接口名称及方法名
    2.创建Maven projec,配置pom.xml
    2.1 依赖的dubbo-service可以从svn上下载.

    <dependencies>
            <dependency>
                <groupId>com.bjsxt</groupId>
                <artifactId>dubbo-service</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.5.3</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.1.6.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.10</version>
            </dependency>
        </dependencies>

     3.编写spirng配置文件
    3.1 application需要自定义名称
    3.2 扫描自己项目中ServiceImpl的@Reference注解

        <!-- 在监控中心/admin管理界面中看是哪个项目 -->
        <dubbo:application name="dubbo-consummer"/>
        <!-- 配置注册中心 -->
        <dubbo:registry protocol="zookeeper" address="192.168.92.130:2181"></dubbo:registry>
        <!-- 配置协议 -->
        <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
        <!-- 注解扫描,扫描@Reference注解 -->
        <dubbo:annotation package="com.bjsxt.service.impl"/>

    4.编写Service实现类代码
    4.1 @Service 把类交给Spring容器
    4.2 @Reference给接口注入对象.对象信息从注册中心获取.

    import org.springframework.stereotype.Service;
    import com.alibaba.dubbo.config.annotation.Reference;
    import com.bjsxt.service.DemoService;
    import com.bjsxt.service.MyService;
    
    @Service
    public class MyServiceImpl implements MyService {
        @Reference
        private DemoService demoService;
        @Override
        public void test() {
            String result = demoService.test("张三");
            System.out.println(result);
        }
    }

    5、编写测试代码:

    public class Test {
        @SuppressWarnings("resource")
        public static void main(String[] args) {
            ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-consummer.xml");
            MyServiceImpl bean = ac.getBean("myServiceImpl", MyServiceImpl.class);
            bean.test();
        }
    }

    八.Admin管理界面
    1.本质:web项目,war打包项目
    2.直接把dubbo-admin-2.5.3放入到tomcat(linux/window都可以)中
    3.启动tomcat.
    4.关闭tomcat.
    5.删除dubbo-admin-2.5.3.war
    5.1 防止下次启动tomcat后重新解压,导致修改内容无效
    6.进入解压后文件夹dubbo-admin-2.5.3/WEB-INF/中修改dubbo.properties文件
    6.1 第一行为注册中心地址
    6.2 第二行是管理员用户名和密码
    6.3 第三行是游客的用户名个和密码

  • 相关阅读:
    OK335x mksd.sh hacking
    Qt jsoncpp 对象拷贝、删除、函数调用 demo
    OK335xS 256M 512M nand flash make ubifs hacking
    Qt QScrollArea and layout in code
    JsonCpp Documentation
    Qt 4.8.5 jsoncpp lib
    Oracle数据库生成UUID
    freemarker得到数组的长度
    FreeMarker中if标签内的判断条件
    freemarker语法
  • 原文地址:https://www.cnblogs.com/LHWorldBlog/p/8653311.html
Copyright © 2011-2022 走看看