欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

简易Dubbo的搭建过程

程序员文章站 2023-01-19 08:02:16
dubbo是一个高性能的,基于java的,开源RPC框架,主要功能是让构建分布式计算更加容易。 (分布式:多台计算机实现不同功能,形成一个整体对外服务) (集群式:多台计算机实现相同功能,分担计算压力) Dubbo采用单一长连接和NIO异步请求,适合小数据量大并发的服务调用,不适合传送大数据量的服务 ......

dubbo是一个高性能的,基于java的,开源RPC框架,主要功能是让构建分布式计算更加容易。

(分布式:多台计算机实现不同功能,形成一个整体对外服务)

(集群式:多台计算机实现相同功能,分担计算压力)

Dubbo采用单一长连接和NIO异步请求,适合小数据量大并发的服务调用,不适合传送大数据量的服务,比如传文件,视频等。

Dubbo主要有四部分组成 :

register   invoker(service consumer)   exporter(service provider) nonitor

工作原理:

1、  exporter启动时向register注册所提供的服务

2、  invoker启动时向register订阅服务的地址列表

3、  invoker调用一个服务地址进行单一的长连接,失败重试另一个地址

4、  运行过程中register对exporter进行实时的心跳机制监控,如果exporter不能提供服务,更新服务列表,并向invoker进行推送,以便于invoker及时更改服务地址

5、  Monitor定时的采集服务调用次数、时间等相关信息

搭建项目所需要的主要的jar包:

  Dubbo框架的实现:dubbo.jar

  字节码生成:javassist.jar

  网络传输:netty.jar

  Register:zookeeper.jar   zkclient.jar

  Spring的相关jar

根据工作原理来配置spring文件:

1、  创建exporter的接口javaSE项目,仅仅包含接口和显现类,将具体的实现类和接口分离达到项目瘦身,方便管理。

2、  把接口项目打包成exporter.jar包,创建实现类项目,导入接口项目exporter.jar包

3、  配置实现类exporterImpl的JavaEE的xml文件

根据官网的demo配置文件,配置自己的配置文件

  application:服务的名称

  registry:配置的注册中心,我们选择zookeeper,在把它的conf/zoo_sample.cfg

  复制一份为zoo.cfg。便可以查看或修改相关的配置文件,这里我们把

  dataDir=/tmp/zookeeper改为dataDir=F:/data/zookeeper

  获得端口号clientPort=2181,修改后的配置文件为:

<?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.xsd

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

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

     <!-- 项目名称 -->

    <dubbo:application name="exporter"/>

    <!-- 注册中心register -->

    <dubbo:registry address="zookeeper://localhost:2181"/>

    <!-- 通信协议 -->

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

    <!--把exporter提供的服务暴露出来 -->

    <dubbo:service interface="com.syd.exporter.service.FruitService" ref="FruitService"/>

    <dubbo:service interface="com.syd.exporter.service.WeatherService" ref="WeatherService"/>

</beans>

在web.xml文件中注册监听器,创建spring的容器对象

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:provider.xml</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

4、  创建invoker项目,这里为了简化,创建JavaSE project ,创建调用者的实现类,参考官网demo的配置文件:

<?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.xsd

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

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

    <!-- 项目名称 -->

    <dubbo:application name="invoker"/>

    <!-- 注册中心 registry -->

    <dubbo:registry address="zookeeper://localhost:2181"/>

    <!-- 调用的服务 -->

    <dubbo:reference id="FruitService" interface="com.syd.exporter.service.FruitService"/>

    <dubbo:reference id="WeatherService" interface="com.syd.exporter.service.WeatherService"/>

    <!-- 调用者类 -->

    <bean id="client" class="com.invoker.consume.Client">

        <property name="ws" ref="WeatherService" />

    <property name="fs" ref="FruitService" />

    </bean>

</beans>

5、  创建测试类,先启动registry注册中心,再启动exportImpl项目,最后用invoker项目进行测试 。

Dubbo的使用,其实只需要有registry、invoker、exporter就可以使用了,但是为了更好的调试、发现问题、解决问题,需要引入monitor。官网上有源码dubbo-admin,可以下载后编译,,发布到tomcat的webapps中就能运行,进行监测。

负载均衡(Load Balance):

负载均衡是以集群为前提,将工作任务(负载),进行平衡,分摊到多个操作单元上进行执行。

Dubbo提供了多种负载均衡,缺省情况下为random随机调用

Random  LoadBalance(随机):可以按服务器的权重设置随机概率,调用量越大,分布越均匀

Loadbanlance=”random”

 

RoundRobin  LoadBalance(轮询): 按公约后的权重设置轮循比率,但是存在慢的提供者累计请求的问题。

Loadbanlance=”roundrobin”

 

LeastActive  LoadBalance(最少活跃调用数):活跃数指调用前后的计数差,差越大,收到的请求越少。

Loadbanlance=”leastactive”

 

ConsistentHash  LoadBalance(一致性hash): 相同参数的请求总是发到同一个提供者

Loadbanlance=”consistenthash”