Dubbo初级入门

Dubbo

分布式基础理论

RPC

RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式。

dubbo核心概念

  1. Apache Dubbo是一款高性能、轻量级的开源Java RPC框架
  2. 它提供了三大核心能力
    • 面向接口的远程方法调用
    • 智能容错和负载均衡
    • 以及服务自动注册和发现

环境搭建及流程

  1. 安装zookeeper及dubbo-admin管理控制台(控制台不装不影响使用)

  2. 思路:

    将接口与bean都定义到公共接口层,

    提供者A实现具体的服务并注册到公共接口,

    消费者B通过公共接口调用

  3. 创建模块

    • 公共接口层

      bean和service
      
    • 服务提供者

      pom.xml
      引入公共接口的依赖
      引入dubbo
      引入curator操作zookeeper
      
      resources下新建provider.xml
      
      <!--1.指定当前服务/应用的名字(同样的服务名字相同,不要和其他服务同名)-->
      <dubbo:application name="user-service-provider"/>
      <!--2.指定注册中心的位置-->
      <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
      <!--3.指定通信规则(通信协议/通信端口)-->
      <dubbo:protocol name="dubbo" port="20880"/>
      <!--4.暴露服务 ref:指向服务真正的实现对象-->
      <dubbo:service interface="gmall.service.UserService" ref="userServiceImpl"/>
      
      <!-- 服务的实现 -->
      <bean id="userServiceImpl" class="com.atguigu.gmall.service.UserServiceImpl"/>
      
    • 服务消费者

      pom.xml同上
      connsumer.xml
      
      <!--扫描包-->
      <context:component-scan base-package="gmall.service"/>
      
      <dubbo:application name="user-service-provider"/>
      
      <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
      
      <!--声明需要调用的远程服务接口,生成远程服务代理-->
      <dubbo:reference interface="gmall.service.UserService" id="userService/>
      
    • 业务调用

      @Service
      public class OrderServiceImpl implements OrderService{
      
          @Autowired
          UserService userService;
      
          /**
           * 初始化订单
           *
           * @param userId
           */
      @Override
      public void initOrder(String userId) {
        System.out.println("用户id : "+userId);
        List<UserAddress> userAddressList =userService.getUserAddressList(userId);
        for (UserAddress userAddress : userAddressList) {
            System.out.println(userAddress.getUserAddress());
         }
       }
      }
      

监控中心

  1. dubbo-admin

    图形化服务管理界面,可从注册中心获取到所有的消费者和提供者进行配置管理

  2. dubbo-monitor-simple

    简单的控制中心

    在提供者和消费者的xml中连接控制中心
    
    <!--连接监控中心-->
    <dubbo:monitor protocol="registry" />
    

整合springboot

服务提供者

  1. 引入依赖(公共接口 和 dubbo的springboot启动依赖)

            <dependency>
                <groupId>org.example</groupId>
                <artifactId>gmall-interface</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
    		<dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>0.2.0</version>
            </dependency>
    
  2. 在springboot配置类中

    dubbo.application.name=boot-user-service-provider
    dubbo.registry.protocol=zookeeper
    dubbo.registry.address=127.0.0.1:2181
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=8171
    dubbo.monitor.protocol=registry
    
  3. 在springboot 中暴露服务和调用服务使用注解调用

    • 在服务提供者实现类加上dubbo的service注解
    • 在启动类中加上@EnableDubbo

服务消费者

  1. 引入依赖

  2. 在springboot配置类中

    server.port=8082
    
    dubbo.application.name=boot-user-service-provider
    dubbo.registry.protocol=zookeeper
    dubbo.registry.address=127.0.0.1:2181
    dubbo.monitor.protocol=registry
    
  3. 注解调用

    • 在服务消费者实现类中注入提供者的service上加@Reference
    • 在启动类中加上@EnableDubbo

dubbo配置相关

启动检查

调整注册中心不服务时是否报错

  1. 单一服务不检查

    <dubbo:reference check="false"/>
    
  2. 所有服务都不检查

    <dubbo:consumer check="false"/>
    

超时及覆盖关系

  • 超时

运行超过多长时间会报错,不设置缺省值是1000ms

  1. 单一服务超时

    允许超时5秒
    
    <dubbo:reference timeout="5000"/>
    
    在实现类中
    睡眠4秒,若大于5秒则报错
    Thread.sleep(4000);
    
  2. 具体方法设置超时

    <dubbo:reference interface="gmall.service.UserService" id="userService">
            <dubbo:method name="getUserAddressList" timeout="1000"/>
    </dubbo:reference>
    
  • 覆盖关系
  1. 精确优先:精确到方法的要比精确到服务的优先,精确到服务要比全局优先
  2. 精确级别一样时,消费者设置要比提供者设置优先(精确优先大于消费者优先)

重试次数

  1. 服务重试(超时的基础上重试)

    不包含第一次请求,故实际访问次数为4次
    
    <dubbo:reference  retries="3" >
    
  2. retries=“0” 代表不重试

  3. 幂等的概念

    此方法多次操作结果都是一样的,如:查询,删除,修改

    非幂等如新增

  4. 幂等方法可以设置重试次数,非幂等方法不可以

多版本

通过版本控制实现不同方法的调用

提供者中

<dubbo:service interface="gmall.service.UserService" ref="userServiceImpl01" version="1.0.0"/>
<dubbo:service interface="gmall.service.UserService" ref="userServiceImpl02" version="2.0.0"/>

<!-- 服务的实现 -->
<bean id="userServiceImpl01" class="com.atguigu.gmall.service.UserServiceImpl"></bean>
<bean id="userServiceImpl02" class="com.atguigu.gmall.service.UserServiceImpl2"></bean>
消费者中

<dubbo:reference interface="gmall.service.UserService" id="userService"
 version="1.0.0">
 
 version="*" 就是随机调用

本地存根

配置

存到哪写到哪

<dubbo:reference interface="gmall.service.UserService" id="userService"
 stub="gmall.service.UserServiceStub">

存根类

public class UserServiceStub implements UserService{

    private final UserService userService;

    /**
     * 传入的是userservice的远程代理对象
     * @param userService
     */
    public UserServiceStub(UserService userService) {
        super();
        this.userService = userService;
    }

Springboot与Dubbo整合的三种方式

  1. 导入dubbo-spring-boot-starter,在springboot配置类中配置相关属性

    如果在配置类中配置dubbo.scan.base-packages,在启动类中就无需加@EnableDubbo注解

  2. 保留原始的xml文件形式,在启动类上添加注解

    导入dubbo-spring-boot-starter

    @ImportResource(locations = "文件名.xml")
    
    在启动类中就无需加@EnableDubbo注解
    
  3. 使用注解API的形式

    将每个组件手动创建到容器中,让dubbo扫描组件

高可用

zookeeper宕机与dubbo直连

注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯,但不能注册新服务

负载均衡机制

默认是随机权重

服务降级

当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作

在dubbo admin网页可以操控

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值