Dubbo的简单使用

1.什么是Dubbo/Dubbox

  1. DUBBO是一个分布式服务治理框架,致力于提供高性能和透明化的RPC远程服务调用方案,可以和 Spring框架无缝集成,是阿里巴巴SOA服务化治理方案的核心框架,每天为2000+个服务提供3000000000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点,同时,国内有大量的大型平台都是基于Dubbo的分布式服务治理架构完成服务的分布式访问。
  2. Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

Dubbo主要解决了以下问题:

在大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡。

1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。

此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。

并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,降低对F5硬件负载均衡器的依赖,也能减少部分成本。

2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。

这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。

3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?

为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。

其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

 

服务提供者实现

项目搭建(Maven项目管理方式):

① 创建公共项目工程:普通的Maven工程,提供utils、DO、接口的代码。

pom.xml 无任何依赖

② 创建服务提供者项目:普通的Maven工程(依赖Dubbo),提供服务实现、服务启动功能。

    pom.xml

<dependencies>

              <dependency>

           <groupId>com.alibaba</groupId>

           <artifactId>dubbo</artifactId>

           <version>2.6.2</version>

       </dependency>

       <dependency>

           <groupId>dubbo-api</groupId>

           <artifactId>dubbo-api</artifactId>

           <version>0.0.1-SNAPSHOT</version>

       </dependency>

         <dependency>

    <groupId>com.github.sgroschupf</groupId>

    <artifactId>zkclient</artifactId>

    <version>0.1</version>

</dependency>

 

      <!-- junit测试包 -->

      <dependency>

         <groupId>junit</groupId>

         <artifactId>junit</artifactId>

         <version>4.12</version>

         <scope>test</scope>

      </dependency>

 

      <dependency>

         <groupId>org.springframework</groupId>

         <artifactId>spring-test</artifactId>

         <version>4.3.16.RELEASE</version>

      </dependency>

 

      

    </dependencies>

 

 

 

dubbo-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://code.alibabatech.com/schema/dubbo"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

    http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

 

    <dubbo:application name="dubbo-test-provider" owner="sampson"></dubbo:application>

   

    <dubbo:protocol name="dubbo" port="20880" ></dubbo:protocol>

   

    <!-- 局域网广播注册中心 -->

    <dubbo:registry address="multicast://239.5.6.7:1234" />

   

    <!-- 配置式发布 -->

    <bean id="userService" class="cn.itsource.dubbo.provider.service.UserServiceImpl"></bean>

    <dubbo:service interface="cn.itsource.dubbo.core.service.IUserService" ref="userService"></dubbo:service>

<!-- 注解式发布 -->

    <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->

    <dubbo:annotation package="cn.itsource.dubbo.provider.service" />

</beans>

启动服务监听

String configLocation = "classpath*:/dubbo-provider.xml";

ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);

System.out.println("dubbo-server服务正在监听,按任意键退出");

System.in.read();

 

服务消费者实现

创建服务消费者项目:普通的Maven工程(依赖Dubbo),完成服务调用功能。

    pom.xml

<dependencies>

    <dependency>

           <groupId>com.alibaba</groupId>

           <artifactId>dubbo</artifactId>

           <version>2.6.2</version>

       </dependency>

<dependency>

           <groupId>dubbo-api</groupId>

           <artifactId>dubbo-api</artifactId>

           <version>0.0.1-SNAPSHOT</version>

       </dependency>

   <dependency>

    <groupId>com.github.sgroschupf</groupId>

    <artifactId>zkclient</artifactId>

    <version>0.1</version>

</dependency>

    </dependencies>

 

dubbo-consumer.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:context="http://www.springframework.org/schema/context"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

    http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd

    http://www.springframework.org/schema/context 

    http://www.springframework.org/schema/context/spring-context.xsd">

 

    <dubbo:application name="dubbo-test-consumer"></dubbo:application>

   

    <!-- 局域网广播注册中心 -->

    <dubbo:registry address="multicast://239.5.6.7:1234" />

      

    <!-- 配置式调用服务 -->

    <!-- <dubbo:reference id="helloService" interface="cn.itsource.dubbo.core.service.IHelloService"></dubbo:reference> -->

   

    <!-- 注解式调用服务 -->

    <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->

    <dubbo:annotation package="cn.itsource.dubbo.consumer" />

</beans>

 

JUnit4调用dubbo服务测试类

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

 

import com.alibaba.dubbo.config.annotation.Reference;

 

import cn.itsource.dubbo.core.service.IHelloService;

 

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration({"classpath*:/dubbo-consumer.xml"})

public class DubboServiceTest {

   @Reference

   private IHelloService helloService;

  

   @Test

   public void testHello(){

      String sayHi = helloService.sayHi("老宋");

      System.out.println(sayHi);

   }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值