美文网首页
微服务-DUBBO高性能RPC框架

微服务-DUBBO高性能RPC框架

作者: 往后余生9375 | 来源:发表于2019-01-17 10:59 被阅读0次

微服务(SOA)

一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

实现方式

1、基于HTTP协议的同步机制(REST、RPC);
2、基于消息队列的异步消息处理机制(AMQP-based message broker)。

实践

今天我将采用效率最高的模式RPC协议展开研究,在SOA服务治理方面,阿里巴巴的Dubbo可以提供高性能和透明化的RPC远程服务调用方案。

我们需要安装zookeeper 3.4.13版本。
http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

采用API方式进行调用

首先创建两个maven项目,分别在pom.xml中引入以下jar包。

 <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.5</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.32.Final</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.11</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
        </dependency>

Provider实现

 //1.服务实现
        EchoService echoService = new EchoServiceImpl();//输出服务
        // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("projectTest");

        // 连接注册中心配置
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://localhost:2181");

        // 服务提供者协议配置
        ProtocolConfig protocol = new ProtocolConfig();
        protocol.setName("dubbo");
        protocol.setPort(28080);
        protocol.setThreads(200);

        // 服务提供者暴露服务配置
        ServiceConfig<EchoService> service = new ServiceConfig<EchoService>(); // 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏
        service.setApplication(application);
        service.setRegistry(registry); // 多个注册中心可以用setRegistries()
        service.setProtocol(protocol); // 多个协议可以用setProtocols()
        service.setInterface(EchoService.class);
        service.setRef(echoService);
        service.setVersion("1.0.0");

        System.out.println("dubbo服务已暴露");

        service.export();

        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

Consumer实现

 // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("projectTest2");

        // 连接注册中心配置
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://localhost:2181");

        // 引用远程服务
        ReferenceConfig<EchoService> reference = new ReferenceConfig<EchoService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏
        reference.setApplication(application);
        reference.setRegistry(registry); // 多个注册中心可以用setRegistries()
        reference.setInterface(EchoService.class);
        reference.setVersion("1.0.0");

        EchoService echoService = reference.get();
        System.out.println(echoService.echo());

采用XML配置

provider.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

<!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="providerTest1"  />

    <!-- 使用multicast广播注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://localhost:2181" />

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.hengyi.service.EchoService" ref="echoService" />

    <!-- 和本地bean一样实现服务 -->
    <bean id="echoService" class="com.hengyi.service.impl.EchoServiceImpl" />
</beans>
 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
        context.start();
        System.out.println("dubbo暴露");
        try {
            System.in.read(); // 按任意键退出
        } catch (IOException e) {
            e.printStackTrace();
        }

consumer.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="projectTest2"  />

    <!-- 使用multicast广播注册中心暴露发现服务地址 -->
    <dubbo:registry address="zookeeper://localhost:2181" />

    <!-- 生成远程服务代理,可以和本地bean一样使用echoService -->
    <dubbo:reference id="echoService" interface="com.hengyi.service.EchoService" />
</beans>
//@reference
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
context.start();
EchoService demoService = (EchoService)context.getBean("echoService"); // 获取远程服务代理
String echo = demoService.echo();
System.out.println( echo ); // 显示调用结果

相关文章

  • 69.SpringCloud Alibaba Dubbo使用

    Dubbo-RPC通信 介绍 Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式服务框架,致力于提供高性能...

  • spring cloud和dubbo比较

    Dubbo Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的...

  • Springboot整合Dubbo

    dubbo介绍 Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务...

  • Java面试(六):Dubbo

    Dubbo 1.Dubbo 是什么? Dubbo 是一款高性能、轻量级的开源 RPC 框架,提供服务自动注册、自动...

  • 01-Dubbo简介

    1.Dubbo简介: Dubbo是一个分布式,高性能,透明化的RPC服务框架(RPC:远程过程调用协议) SOA:...

  • dubbo 小Demo

    什么是Dubbo? Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的...

  • 【框架面试】Dubbo基础

    1、Dubbo 是什么? Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现...

  • 2018-08-01 Dubbo+zookeeper

    Dubbo 是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 Dubbo 架...

  • Dubbo是什么?

    Dubbo是什么 Dubbo是: 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 ...

  • spring+dubbo入门手记

    一.dubbo简介 Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现...

网友评论

      本文标题:微服务-DUBBO高性能RPC框架

      本文链接:https://www.haomeiwen.com/subject/sgwbdqtx.html