一起来学SpringBoot(十四)Dubbo的整合

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。

在2月15日,大年三十,经过一系列紧张的投票,来自阿里巴巴的广受社区欢迎的RPC开源框架Dubbo宣布正式进入Apache孵化器。说起Dubbo框架,可能很多后端开发者都有所了解,它是国内比较早的、影响较大的开源项目,包括阿里巴巴、京东、当当网、去哪儿网、网易考拉、微店等电商平台都有其成功应用案例。

Dubbo于2011年开源,之后就迅速成为了国内该类开源项目的佼佼者。可以想象,2011年时,优秀的、可在生产环境使用的RPC框架很少,Dubbo的出现迅速给人眼前一亮的感觉,而同时它又有阿里巴巴背书,所以也迅速收到了开发者的亲睐。Dubbo 目前在 GitHub 上有超过 16000 个 star 和超过 12000 的 fork 数,绝对是国内影响力最大的开源项目之一。

但奇怪的是,在2014年10月30日发布2.4.11版本后,Dubbo突然停止更新,当时社区一片哗然(其实是在2012年10月之后就基本停止了重要升级,改为阶段性维护)。具体原因现在也不得而知,知乎上也有一些讨论,包括团队调整、内部主推HSF等。不过可以确认的是,在4年前,国内企业对于开源的重视程度都远远没有今天高。

而在官方停止更新Dubbo之后,当当网(Dubbox)、网易考拉(Dubbok)都有维护自己单独的分支,这也可以从另外一个侧面证明Dubbo确实应用到了这些企业的重点业务,并且规模不小。

随着阿里巴巴对于开源的逐步重视,2017年9月7日,Dubbo悄悄的在GitHub发布了2.5.4版本。随后,没过多久,又迅速发布了2.5.5、2.5.6、2.5.7等版本。在10月举行的云栖大会上,阿里宣布Dubbo被列入集团重点维护开源项目,这也就意味着Dubbo起死回生,开始重新进入快车道。

这章主要介绍Dubbo是怎么集成springboot的,Dubbo起死回生后,同样官方也放出的对应boot的start

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

最新版本呢是兼容springboot 2.x 以上,其中还有0.1.0版本主要针对springboot1.5x的兼容,整合包内默认提供了apcache的curator 来连接zookeeper,所以不用在引用连接zookeeper的包。

项目结构

在这里插入图片描述

  • dubbo-api 是服务的接口
  • dubbo-provider 是服务的生产者 引用dubbo-api
  • dubbo-consumer 是服务的消费者 引用dubbo-api

服务接口

package com.maoxs.service;

public interface DemoService {
    String sayHello(String name);
}

定义一个DemoService的接口,并且写一个sayHello的方法

生产者

首先呢看下yml

spring:
  application:
    name: springboot-service-provider
server:
  port: 9001
dubbo:
  protocol:
    port: 20880
    name: dubbo
  application:
    registry: zookeeper://127.0.0.1:6379  #如果想改用redis注册中心呢把zookeeper改为redis即可
    name: dubbo-provider-demo
    id: dubbo-provider-demo
    qos-port: 1111
  scan:
    basePackages: com.maoxs.service.impl
demo:
  service:
    version: 1.0.0

如果想改用redis注册中心呢把zookeeper改为redis即可。这里的scan.basePackages来扫描dubbo的服务

package com.maoxs.service.impl;

import com.alibaba.dubbo.config.MethodConfig;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.dubbo.validation.MethodValidated;
import com.maoxs.service.DemoService;

@Service(version = "${demo.service.version}")
public class DefaultDemoService implements DemoService {
    public String sayHello(String name) {
        return "Hello, " + name + " (from Spring Boot)";
    }
}

这个呢是服务的具体实现,切记,这里的@Service用的是dubbo的注解

然后呢是启动类 由于生产者作用只是把服务注册到注册中心,所以可以把启动类设置类非web应用

package com.maoxs;

import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class SpringbootDubboProviderApplication {

    public static void main(String[] args) {
          new SpringApplicationBuilder(SpringbootDubboProviderApplication.class)
                .web(WebApplicationType.NONE) // 非 Web 应用
                .run(args);
    }
}

消费者

在来看些消费者的代码

还是先看yml

spring:
  application:
    name: springcloud-service-consumer
server:
  port: 8001
dubbo:
  registry:
    address: zookeeper://127.0.0.1:2181
    #address: redis://127.0.0.1:6379
  application:
    name: service-consumer
  scan:
    basePackages: com.maoxs.controller
demo:
  service:
    version: 1.0.0

然后呢,我们这里做一个controller来调用远程的服务


package com.maoxs.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.maoxs.service.DemoService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoConsumerController {

    @Reference(version = "${demo.service.version}")
    private DemoService demoService;

    @RequestMapping("/sayHello/{name}")
    public String sayHello(@PathVariable String name) {
        return demoService.sayHello(name);
    }
}

然后呢,我们启动zookeeper 注册中心,把服务注册上去来看下效果

在这里插入图片描述

ok,我们看到调用成功了!!

本博文是基于springboot2.x 如果有什么不对的请在下方留言。

相关连接:

个人博客地址 : www.fulinlin.com

csdn博客地址:https://blog.csdn.net/qq_32867467

集合源码地址 : https://gitee.com/Maoxs/springboot-test

注:如果不对联系本宝宝及时改正~~

猜你喜欢

转载自blog.csdn.net/qq_32867467/article/details/82944657