Dubbo学习笔记

目录

一、分布式系统

RPC(Remote Procedure Call)

二、dubbo框架

基本框架

dubbo支持的协议

dubbo直连方式

常用的标签

三、注册中心—Zookeeper

dubbo-使用注册中心

四、dubbo参数配置

关闭检查

重读次数

超时时间

版本号


一、分布式系统

什么是分布式系统

        分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统,分布式系统是建立在网络上的服务端一种结构。

RPC(Remote Procedure Call)

        是指远程过程调用,是一种进程间通信方式,是技术思想,允许程序调用另一个地址空间的过程或函数,而不用开发人员显示编码这个调用的细节。调用本地方法和调用远程方法一样。

       RPC的特点:简单、高效、通用

       RPC基本原理

二、dubbo框架

Dubbo提供三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

Dubbo是一个分布式服务框架,致力于提高性能和透明化的RPC远程服务调用方案、服务治理方案。

官网:http://dubbo.apache.org/zh-cn/

基本框架

服务提供者(provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务

服务消费者(consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法。

注册中心(registry):注册中心返回服务提供者地址列表给消费者

监控中心(monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

dubbo支持的协议

dubbo 官方推荐使用 dubbo 协议。 dubbo 协议默认端口 20880。
spring配置文件加入:
<dubbo:protocol name="dubbo" port="20880">

dubbo直连方式

点对点的直连项目:消费之直接访问服务提供者,没有注册中心。消费之必须指定服务提供者的访

问地址

创建服务提供者

创建一个maven web工程:服务的提供者

创建一个实体bean查询结果

提供一个服务接口:xxxx

实现这个服务接口:xxxxImpl

       配置dubbo服务提供者的名称:保证唯一

       声明dubbo使用的协议和端口号

       暴露服务,使用直连

添加监听器

配置pom文件加入spring 依赖和dubbo依赖

       <!--Spring依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>

        <!--dubbo依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>

创建dubbo配置文件

    <!--服务提供者声明名称:必须保证服务名称的唯一性,它的名称是dubbo内部使用的唯一标识-->
    <dubbo:application name="001-link-userservice-provider"/>

    <!--访问服务协议的名称及端口号,dubbo官方推荐使用的是dubbo协议,端口号默认为20880-->
    <!--
        name:指定协议的名称
        port:指定协议的端口号(默认为20880)
    -->
    <dubbo:protocol name="dubbo" port="20880"/>

    <!--
        暴露服务接口->dubbo:service
        interface:暴露服务接口的全限定类名
        ref:接口引用的实现类在spring容器中的标识
        registry:如果不使用注册中心,则值为:N/A
    -->
    <dubbo:service interface="com.wkcto.dubbo.service.UserService" ref="a" registry="N/A"/>

    <!--将接口的实现类加载到spring容器中-->
    <bean id="a" class="com.wkcto.dubbo.service.impl.UserServiceImpl"/>

创建服务消费者

创建一个maven web工程:服务的消费者

配置pom文件:添加需要的依赖

设置dubbo的核心配置文件

编写controller

配置中央调度器(servlet:DispatcherServlet)

配置pom文件还要添加依赖服务提供

将提供者打包成jar包发送到本地仓库

       <!--依赖服务提供者-->
        <dependency>
            <groupId>com.wkcto.dubbo</groupId>
            <artifactId>001-link-userservice-provider</artifactId>
            <version>1.0.0</version>
        </dependency>

创建dubbo配置文件


    <!--声明服务消费者的名称:保证唯一性-->
    <dubbo:application name="002-link-consumer"/>

    <!--
        引用远程服务接口:
        id:远程服务接口对象名称
        interface:调用远程接口的全限定类名
        url:访问服务接口的地址
        registry:不使用注册中心,值为:N/A
    -->
    <dubbo:reference id="userService"
                     interface="com.wkcto.dubbo.service.UserService"
                     url="dubbo://localhost:20880"
                     registry="N/A"/>

dubbo服务最优化

分包

建议将服务接口、服务模型、服务异常均放在公共包中

粒度

服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤, 否则将面临
分布式事务问题,Dubbo 暂未提供分布式事务支持。
改造dubbo项目
抽象分散在多个项目中的公共接口,实体类,异常,工具类到一个项目中,在其他项目 如服务提
供者,消费者共用公共的资源。创建一个maven java 工程,dubbo 官方推荐使用一个模式,将实
体bean和业务接口存放在接口工程中
工程目录如下:

常用的标签

Dubbo常用标签分为三类:公用标签、服务提供者标签、服务消费者标签

公用标签:<dubbo:application/>和<dubbo:registry>

配置应用信息<dubbo:application name="服务的名称"/>

配置注册中心<dubbo:registry address="ip:port" protocol="协议"/>

提供者标签:<dubbo:service interface=”服务接口名” ref=”服务实现对象 bean”>

消费者标签:<dubbo:reference id=服务引用 bean 的 idinterface=服务接口名/>

三、注册中心—Zookeeper

Zookeeper 是一个高性能的,分布式的,开放源码的分布式应用程序协调服务。简称 zk是一个树
形结构。这种树形结构和标准文件系统相似。ZooKeeper 树中的每个节点被称为Znode。和文件系
统的目录树一样,ZooKeeper 树中的每个节点可以拥有子节点。每个节点表示一个唯一服务资源
源。
官网下载地址: http://zookeeper.apache.org/
下载的文件 zookeeper-3.5.4-beta.tar.gz. 解压后到目录就可以了
将zoo-sample.cfg改名为zoo.cfg
tickTime:心跳时间
dataDir:数据目录
clientPort:客户端连接
在bin 目录下执行zkserver.cmd

dubbo-使用注册中心

pom文件相关依赖

 <!--注册中心依赖-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.1.0</version>
        </dependency>
提供者dubbo配置


    <!--声明dubbo使用的协议名称和端口号-->
    <dubbo:protocol name="dubbo" port="20880"/>

    <!--现在要使用zookeeper注册中心-->
    <!--指定注册中心地址和端口号-->
    <!--<dubbo:registry address="zookeeper://localhost:2181"/>-->
    <!--使用linux系统中的zookeeper服务-->
    <dubbo:registry address="zookeeper://192.168.154.128:2181"/>

    <!--暴露服务接口-->
    <dubbo:service interface="com.mei.dubbo.service.UserService" ref="userServiceImpl"/>

    <!--加载接口实现类-->
    <bean id="userServiceImpl" class="com.mei.dubbo.service.impl.UserServiceImpl"/>

消费者dubbo配置

 <!--声明dubbo服务消费者名称:保证唯一性-->
    <dubbo:application name="008-zk-consumer"/>

    <!--指定注册中心-->
    <!--<dubbo:registry address="zookeeper://localhost:2181"/>-->
    <!--使用linux系统中的zookeeper服务-->
    <dubbo:registry address="zookeeper://192.168.154.128:2181"/>

    <!--引用远程接口服务-->
    <dubbo:reference id="userService" interface="com.mei.dubbo.service.UserService"/>

四、dubbo参数配置

关闭检查

dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完
成,以便上线时,能及早发现问题,默认 check=true 。通过 check="false" 关闭检查。
<dubbo:reference interface="com.foo.BarService" check="false" />

重读次数

消费者访问提供者,如果访问失败,则切换重试访问其它服务器,但重试会带来更长延迟。 访问
时间变长,用户的体验较差。多次重新访问服务器有可能访问成功
<dubbo:service retries="2" />

超时时间

由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。为了避免超时导致客
户端资源(线程)挂起耗尽,必须设置超时时间。
<dubbo:reference interface="com.foo.BarService" timeout="2000" />

版本号

每个接口都应定义版本号,为后续不兼容升级提供可能。 当一个接口有不同的实现,项目早期使用
的一个实现类, 之后创建接口的新的实现类。区分不同的接口实现使用 version
  <!--引用远程接口服务-->
    <dubbo:reference id="userService" interface="com.mei.dubbo.service.UserService" version="1.0.0" />
    <dubbo:reference id="userService2" interface="com.mei.dubbo.service.UserService" version="2.0.0"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值