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 第三行是游客的用户名个和密码

  • 相关阅读:
    深入浅出 JVM ClassLoader
    JVM 线上故障排查基本操作
    深入浅出 JVM GC(3)
    MyBatis 源码分析系列文章合集
    MyBatis 源码分析
    MyBatis 源码分析
    MyBatis 源码分析
    MyBatis 源码分析
    MyBatis 源码分析
    MyBatis 源码分析系列文章导读
  • 原文地址:https://www.cnblogs.com/LHWorldBlog/p/8653311.html
Copyright © 2011-2022 走看看