springboot下的dubbo探究

springboot下的dubbo探究

alibaba目前提供了两种针对springboot的dubbo服务:
1.

   <dependency>
       <groupId>com.alibaba.spring.boot</groupId>
       <artifactId>dubbo-spring-boot-starter</artifactId>
       <version>2.0.0</version>
   </dependency>
   <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>

对应的springboot版本都是1对应1,2对应2。
这里以com.alibaba.boot为例。

原理

写在之前:推荐阿里中间件团队博客:阿里中间件团队博客

服务注册
  1. 介绍
    dubbo是一个轻量级微服务分布式服务框架,通过zookeeper(最优,其他:redis等)来实现注册,provider与consumer都会注册到RegistryFactory上。
    相比于其他微服务框架而言,dubbo仅仅支持服务治理,但也更简洁,使用方便,拥有重试机制,可以实现服务的负载均衡配置。
  2. 原理
    dubbo通过Rpc通讯,采用netty框架。
    dubbo服务注册模式:
    provider – registry factory – consumer
    |---------------------------------------------->|
    2.1provider服务在启动时,zk会初始化dubbo的注册节点,然后通过dubbo实现代理转换provider接口,同步注册到zk上。
    2.2consumer服务启动时,同样会将消费接口代理注册到zk上,然后向dubbo注册中心订阅自己引用的接口,然后注册中心提供provider接口列表给consumer,consumer缓存到本地,接口请求时,依据负载均衡策略选择一个接口进行请求,失败则请求下一个。
    2.3注册中心定时接收provider的接口注册信息,并定时向consumer反馈。
  3. Monitor监控接口使用情况
其他
  1. dubbo架构
    dubbo架构分10层,大致上分为:
    服务service–>配置config–>代理proxy–>注册中心registry–>集群cluster–>监控器Monitor
    –>远程调用protocol–>信息交换exchange–>网络传输transport–>序列化serialize
  2. 负载均衡
    未配置使用默认随即。
    可配置:轮询、权重、自定义等等。
  3. 容错
    failover查询重试
    failfast操作失败立即失败
开发
1.依赖

dubbo以zookeeper作为注册中心,故在父类pom中引入:

   <!-- zookeeper -->
   <dependency>
       <groupId>org.apache.zookeeper</groupId>
       <artifactId>zookeeper</artifactId>
       <version>${zookeeper.version}</version>
   </dependency>
   <dependency>
       <groupId>org.apache.curator</groupId>
       <artifactId>curator-recipes</artifactId>
       <version>${curator.version}</version>
   </dependency>
   <dependency>
       <groupId>org.apache.curator</groupId>
       <artifactId>curator-framework</artifactId>
       <version>${curator.version}</version>
   </dependency>
   <!-- dubbo -->
   <dependency>
       <groupId>com.alibaba.boot</groupId>
       <artifactId>dubbo-spring-boot-starter</artifactId>
       <version>0.2.0</version>
   </dependency>
2.服务

此处模拟多节点服务提供:
在这里插入图片描述
provider与provider-bak为同一个服务两个节点。
api为接口api组件jar包。

2.1provider

a. 在provider中实现该接口:

  import com.shev.dubbo.provider.api.service.DubboProviderService;
  import org.springframework.stereotype.Service;
  
  @Service
  @com.alibaba.dubbo.config.annotation.Service
  public class DubboProviderServiceImpl implements DubboProviderService
  {
      @Override
      public String getProviderInfo(String request)
      {
          return request + ":provider";
      }
  }

说明:该接口的实现必须在dubbo的service下,故这里引用了dubbo的service来暴露,同样bak服务也实现该接口(此处代码完全一致,只返回内容有区别,来区分节点):

    @Override
    public String getProviderInfo(String request)
    {
        return request + ":provider-bak";
    }

b. 配置文件:

dubbo:
  application:
    name: dubbo-producer
  registry:
    address: 192.168.99.128:2181
    protocol: zookeeper
    timeout: 2000
  protocol:
    name: dubbo
    port: 20880
  monitor:
    protocol: registry
  provider:
    timeout: 2000

此处一个provider的dubbo端口是20880,另一个provider是20881,此处每个服务所占dubbo端口是不同的,实际场景需要灵活配置。
c. 启动:
在application启动类上加上@EnableDubbo启动服务即可:
在这里插入图片描述
查询zookeeper可见dubbo的provider已经提供了两个节点的接口服务。

2.2consumer

a. 消费该接口:
在消费者这里可以直接使用该接口:

    @Reference
    private DubboProviderService dubboProviderService;

    @GetMapping("/getPaperList")
    public String getPaperList(String request)
    {
        System.out.printf("request:" + request);
        String result = dubboProviderService.getProviderInfo(request);
        System.out.println(result);
        return result;
    }

此处的@Reference为dubbo接口的注解,用来识别是远程接口。
b. 配置文件:

dubbo:
  application:
    name: dubbo-consumer
  registry:
    address: 192.168.99.128:2181
    protocol: zookeeper
  protocol:
    name: dubbo
    port: 20880
  monitor:
    protocol: registry

配置文件与provider一致。
c. 启动:
同样在application启动类上加上@EnableDubbo启动即可,如果多消费者,则zk中也会记录消费者节点,如下:
在这里插入图片描述
这里通过启动日志可见zk连接情况,provider与consumer同样可见:
在这里插入图片描述
然后请求我们的测试接口:
localhost:8083/consumer/getPaperList?request=hah
结果:
在这里插入图片描述
到此多节点模拟就实现了。

code源码-githup
微信公众号:像是风
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值