搭建SpringBoot+Dubbo微服务实践

本文介绍了如何使用SpringBoot和Dubbo搭建微服务,包括Dubbo介绍、设置注册中心Zookeeper、搭建Dubbo Admin监控界面、创建API项目、构建服务提供者和消费者。通过详细步骤,展示了一个完整的微服务实践过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dubbo介绍

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

Dubbo是阿里出的一个高性能的分布式微服务框架,它的特点是性能高、界面友好、文档齐全(特别是中文文档),是很多中小型公司快速搭建微服务的首选技术。18年初被阿里重新进行维护,并进入Apache孵化器,并于前段时间新发布了2.7.0新版本。官方网站为http://dubbo.incubator.apache.org/zh-cn/。

搭建注册中心

在dubbo中,每一个服务都是分布式的,消费者与提供者的关系并不是一对一的关系,而是一对多,并且服务提供者的实例位置是未知的,如果都由开发者使用静态文件去维护这个关系显示不合适的,一方面是徒增工作量,另一方面是灵活度不高,如果服务提供者更换了服务器地址,那么需要重新配置等,所以目前比较推崇的方案是所有服务提供者均主动将自己的信息注册到同个地方中,而消费者只要一律从这个地方取他需要的东西即可,这个地方就是所谓的注册中心。目前dubbo可以选择的注册中心包括zookeeper、redis等,一般建议使用zookeeper,下面演示一下在windows中如何搭建zookeeper注册中心。

1、下载zookeeper
直接在官网的镜像站下 https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

2、解压并配置zookeeper
直接使用官方示例配置,把解压出来的\zookeeper\conf\zoo_sample.cfg 文件名改为zoo.cfg即可。

3、运行zookeeper注册中心
运行启动脚本:/zookeeper/bin/zkServer.sh

搭建Dubbo Admin

在Dubbo中,一大杀器就是它的可视化监控界面,在这个界面中可以查看服务者、提供者的数量、状态等,并对服务降级、容错、屏蔽等提供了可视化操作。下面演示如何搭建Dubbo Admin。

安装
下载代码: git clone https://github.com/apache/incubator-dubbo-ops.git
在 dubbo-admin-backend/src/main/resources/application-production.properties中指定注册中心地址
构建
mvn clean package
启动
mvn --projects dubbo-admin-backend spring-boot:run
或者
cd dubbo-admin-backend/target; java -jar dubbo-admin-backend-0.0.1-SNAPSHOT.jar
访问 http://localhost:8080

详细操作可参考:https://github.com/apache/incubator-dubbo-ops/blob/develop/README_ZH.md

注意:
构建之前环境需安装node.js
本人在构建dubbo-admin-backend时test case不通过,不知道为啥,不细研究了,忽略test后构建成功

以上搭建出来的是dubbo-admin的develop版本,支持dubbo2.7以上的版本。因为dubbo-admin clone下来的默认为develop版本,因此如需使用master版本,需切换代码到master版本后进行构建
git checkout -b master origin/master

搭建API项目

由于Dubbo是采用RPC调用方式,这也是与Spring Cloud比较大的区别之一。在Spring Cloud中,服务通过HTTP接口提供给其它服务调用,对于调用者与被调用者来说,只要双方保证满足http接口的契约即可,但是在dubbo中,是严格要求调用接口的类路径、参数等双方一致。所以需要构建一个API项目,该项目里面存放服务接口即公共实体,双方依赖这个项目完成远程调用。

pom.xml

    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wl</groupId>
    <artifactId>dubbo-interface</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>

公共服务接口-HelloService.java

package com.wl.dubbointerface.service;

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

搭建服务提供者

服务提供者就是被消费者所调用的,它需要实现公共服务接口,并通过dubbo把自己的服务暴露出来。

pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.wl</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</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-web</artifactId>
    </dependency>

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

    <dependency>
        <groupId>com.wl</groupId>
        <artifactId>dubbo-interface</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--引入dubbo的依赖-->
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.6.5</version>
    </dependency>
    <!-- 引入zookeeper的依赖 -->
    <dependency>
        <groupId>com.101tec</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.11</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>4.1.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

com.alibaba.boot是迁移过后出的一个最新的dubbo spring boot starter,也是目前官方推荐使用的。值得注意的是,该starter不包含注册中心客户端,需要自己配置。一般推荐使用zookeeper作为注册中心,所以需要手动引入zkclient。

application.properties

#web服务端口,由于我们不需要使用web服务,所以将其设为随机端口
server.port=-1
# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages  = com.wl.dubboprovider.service.impl
#生产者名称
dubbo.application.name=dubbo-provider
#注册中心地址
dubbo.registry.address=zookeeper://118.31.67.37:2181

服务实现类PeopleServiceImpl

package com.wl.dubboprovider.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.wl.dubbointerface.service.HelloService;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

@Service
@EnableAutoConfiguration
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

搭建服务消费者

pom.xml和服务提供者一样

application.properties

#web服务端口
server.port=80
#消费者名称
dubbo.application.name=dubbo-consumer
#注册中心地址
dubbo.registry.address=zookeeper://118.31.67.37:2181

控制器PeopleController

package com.wl.dubboconsumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.wl.dubbointerface.service.HelloService;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class HelloController {
    @Reference
    private HelloService helloService;

    @RequestMapping("/hello")
    public String hello() {
        String hello = helloService.sayHello("world");
        System.out.println(hello);
        return hello;
    }
}

至此,整个项目便搭建完毕

七、上线运行

依次运行dubbo-provider 与dubbo-consumer,顺序不能搞错,并且得确保provider启动完成后再启动consumer,否则后期会出现空指针异常。
至此,我们总共启动了四个服务,分别是zookeeper注册中心、dubbo-admin、dubbo-provider、dubbo-consumer,如下图:

打开dubbo监控网页检查服务消费者和提供者是否已经注册成功:
在这里插入图片描述
在这里插入图片描述
可以看到,提供者与消费者已成功注册到注册中心

2、基本调用
使用浏览器访问
在这里插入图片描述
观察服务提供者日志也同样打印了 Hello world

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值