springboot 整合 dubbo2.7.x 版本

本贴最后更新于 1808 天前,其中的信息可能已经沧海桑田

什么是 Dubbo?

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

是的,是 Apache Dubbo,不在是 Alibaba Dubbo。原因简单来说就是 Alibaba 将 dubbo 移交给 Apache 开源社区进行维护。
详情见这两篇文章:
Dubbo 正式进入 Apache 开源孵化器
从遇见到信任 | Apache Dubbo 的毕业之旅

Dubbo2.7.x 版本变化

  1. JDK 版本需求上升到 1.8
  2. 包名更换:com.alibaba.dubbo - > org.apache.dubbo
  3. 注册中心一分为三,变成注册中心,元数据中心,配置中心
  4. 异步支持优化
  5. 服务治理规则优化
    ......

Dubbo 生态系统

图片.png
此图来源于 Dubbo 官网

SpringBoot 整合 Dubbo2.7.x

环境信息:
JDK 1.8
SpringBoot 2.2.1
Dubbo 2.7.4.1
准备工具:zookeeper 官网下载地址,新版 dubbo_admin 官网下载地址

zookeeper 说明

ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。
分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协
调/通知、集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列
等功能。

Dubbo 支持多种注册中心:redis,nacos,zookeeper..... 推荐使用 zookeeper。

zookeeper 安装启动

在官网下载好 zookeeper 之后,解压。
然后将 conf 文件夹下的 zoo_sample.cfg 文件复制一份重命名为 zoo.cfg 不做任何的修改。
进入 bin 文件夹下找到 zkServer.cmd(windows 环境下,linux 使用 zkServer.sh) 双击启动即可。
启动后默认端口为 2181。 zookeeper 在 3.5.5 版本后还会占用 8080 端口,需要注意。

新版 Dubbo_Admin

使用前建议先阅读官方文档说明!!!!

可以通过官网 readme 说明进行操作,也可以直接使用 IDEA 拉取项目代码运行。
IDEA 拉取项目之后先启动 DubboAdminApplication 这个类,默认 8080 端口,已被占用可以手动修改。
然后运行 dubbo-admin-ui 这个前端模块(找到 package.json,然后找到 npm run dev ,点击左侧绿色启动按钮即可)注意:需要安装 node.js。默认 8081 端口,也是可以手动在 index.js 里面进行修改。
运行起来后访问 :localhost:8081 就会出现如下画面,就表示启动成功了。
图片.png

创建 springboot 项目

先创建一个多模块的 springboot 项目,方便体验 dubbo。

dubbo-api 接口服务模块

pom 文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.hjljy</groupId>
        <artifactId>springboot_dubbo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hjljy</groupId>
    <artifactId>dubbo_api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo_api</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
..................

然后定义两个简单的接口

public interface TestService {
    String showName();
}
public interface TestService2 {
    String showName();
}

dubbo-provider 服务提供者

pom 文件内容:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- dubbo 2.7.x引入-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.hjljy</groupId>
            <artifactId>dubbo_api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
........ 

创建对应接口实现:

@Service(version = "1.0.0")
public class TestService2Impl implements TestService2 {
    @Override
    public String showName() {
        return "HELLO   TestService2";
    }
}
@Service(version = "1.0.0")
public class TestServiceImpl implements TestService {
    @Override
    public String showName() {
        return "HELLO   DUBBO";
    }
}

application 配置文件配置:

# Spring boot application
spring.application.name=dubbo-provider-demo
# Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
dubbo.scan.base-packages=com.hjljy.dubbo_provider.impl   

# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
dubbo.application.name=${spring.application.name}

# Dubbo Protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

## Dubbo Registry
dubbo.registry.address=zookeeper://127.0.0.1:2181

server.port=7010

注意事项:

  • @Service 一定要加上 version 属性 并且是 dubbo 包下面的注解不是 spring 里面的注解
  • base-packages 指定接口实现所在路径。
  • dubbo 的配置不再以 spring 开头。

dubbo-comsumer 服务消费者

pom 文件内容:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- dubbo 2.7.x引入-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.hjljy</groupId>
            <artifactId>dubbo_api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

消费创建的服务

@RestController
public class TestDubboController {
    @Reference(version = "1.0.0")
    TestService2 service2;
    @Reference(version = "1.0.0")
    TestService service;

    @GetMapping("test1")
    public String test1(){
        return  service.showName();
    }
    @GetMapping("test2")
    public String test2(){
        return  service2.showName();
    }
}

application 配置文件配置:

spring.application.name=dubbo-consumer-demo
dubbo.registry.address=zookeeper://127.0.0.1:2181
server.port=7000

启动程序验证 DUBBO

先启动 DubboProviderApplication
然后启动 DubboConsumerApplication
最后访问 http://127.0.0.1:7000/test1 http://127.0.0.1:7000/test2
图片.png
成功返回信息,验证成功。

然后登陆 dubbo_admin 查看提供的服务:
图片.png

到这里完成的 springboot 整合 dubbo2.7.x 就完成了。


完整代码地址:https://gitee.com/hjljy/springboot_dubbo

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 18 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 596 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 5 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...