Springboot集成Dubbo和Zookeeper框架搭建

目录

1.搭建环境

2.搭建步骤

3.效果展示

4.注意项


1.搭建环境如下图所示:

2.搭建步骤

2.1 目标概述

一共三个服务,一个公共接口服务,一个提供者服务,一个消费者服务。最终以浏览器或者postman查询接口,实现订单信息回显。最终项目结构如图所示:

2.2 搭建项目

首先搭建根项目,pom文件详细信息如下代码块所示:

复制代码
<modelVersion>4.0.0</modelVersion>
<groupId>org.sh.ds</groupId>
<artifactId>ds</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ds</name>
<description>ds</description>
<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.6.13</spring-boot.version>
</properties>
<packaging>pom</packaging>
复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>

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

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

<modules>
    <module>ds_interface</module>
    <module>ds_provider</module>
    <module>ds_consumer</module>
</modules>

接下来搭建公共接口服务,它是一个被引用的jar,无需启动类,整体结构如图所示:

pom文件详细信息如下代码块所示:

复制代码
<parent>
    <groupId>org.sh.ds</groupId>
    <artifactId>ds</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>org.sh.ds-interface</groupId>
<artifactId>ds_interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ds_interface</name>
<description>ds_interface</description>
<properties>
    <java.version>1.8</java.version>
</properties>
复制代码
<packaging>pom</packaging>

接下来搭建提供者服务, 它是一个服务,需要启动类,整体结构图如下:

pom文件详细信息如下代码块所示:

复制代码
<parent>
    <groupId>org.sh.ds</groupId>
    <artifactId>ds</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.sh.ds-interface</groupId>
        <artifactId>ds_interface</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>


<modelVersion>4.0.0</modelVersion>
<groupId>org.sh.provider</groupId>
<artifactId>ds_provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ds_provider</name>
<description>ds_provider</description>
<properties>
    <java.version>1.8</java.version>
</properties>
<packaging>jar</packaging>

yml文件如下图所示:

对应的启动类需要加注解@EnableDubbo,启动Dubbo自动配置,如下图所示:

提供者服务会提供订单的基本信息,具体代码如下所示:

复制代码
import com.alibaba.dubbo.config.annotation.Service;
import org.sh.ds.ds_interface.bean.ConsumerInfo;
import org.sh.ds.ds_interface.service.ConsumerService;
import org.springframework.stereotype.Component;

@Service
@Component
public class ConServiceImpl implements ConsumerService {
    @Override
    public ConsumerInfo getConInfo(String orderNum) {
        return new ConsumerInfo("张三", "12345678901");
    }
}

其中,@service 必须引用dubbo注解, 暴漏服务,使Spring Bean作为Dubbo服务接口的实现类,自动将服务注册到配置的注册中心。如此,提供者服务就已经搭建完毕。

接下来搭建消费者服务,消费者服务提供接口,和提供者服务有些不同,整体结构图如下:

pom文件详细信息如下代码块所示:

复制代码
<parent>
    <groupId>org.sh.ds</groupId>
    <artifactId>ds</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>org.sh.consumer</groupId>
<artifactId>ds_consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ds_consumer</name>
<description>ds_consumer</description>
<properties>
    <java.version>1.8</java.version>
</properties>
<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>org.sh.ds-interface</groupId>
        <artifactId>ds_interface</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

</dependencies>

yml文件如下图所示:

复制代码
server:
  port: 8081
  servlet:
    context-path: /api

dubbo:
  application:
    name: dubbo-consumer
  registry:
    address: 127.0.0.1:2181
    protocol: zookeeper
  monitor:
    protocol: registry

消费者接口具体实现如下所示:

复制代码
@Reference
private ConsumerService consumerService;




@Override
public Map<String,String> getOrderInfo(String orderNum) {
    Map<String,String> orderInfo = new HashMap<>();
    //基本信息
    ConsumerInfo consumerInfo = consumerService.getConInfo(orderNum);
    orderInfo.put("staffName",consumerInfo.getStaffName());
    orderInfo.put("staffPhone",consumerInfo.getStaffPhone());
    //订单信息
    orderInfo.put("orderNum",orderNum);
    return orderInfo;
}

其中@Reference即消费者通过该注解注入服务提供者的接口代理对象,实现远程调用。

2.3 服务启动

首先通过maven编译,打包确保无报错,然后依次启动zookeeper、提供者服务、消费者服务。

zookeeper启动如下图所示:

具体怎么部署zookeeper可自行查询,需要注意的主要问题是和dubbo的版本兼容。

提供者服务启动如下图所示:

消费者服务启动如下图所示:

3. 效果展示

通过postman请求结果如下图所示:

通过浏览器请求结果如下图所示:

4. 注意项

在搭建中发现最容易出问题的是版本兼容,所以必须搭配好版本。以免出现各种启动报错问题。例如启动zookeeper报错,启动微服务报错等。如下所示:

1.zookeeper报错:java.lang.NoClassDefFoundError: org/apache/zookeeper/Watcher

  1. Close of session 0x0

java.io.IOException: Len error. A message from /192.168.31.190:52951 with advertised length of -625229312 is either a malformed message or too large to process (length is greater than jute.maxbuffer=1048575)

zookeeper还可以配置web端可视化工具,有两种方式,其一:ZooInspector,这个可自行下载, 直接运行jar包即可。如下图所示:

其二:使用zkui工具,自行下载后,需要在idea中使用maven编译,生成jar包,如下图所示

同级目录,需要复制一份config.cfg文件,打开该文件可设置登录用户和密码,如图所示:

最后可在浏览器打开web端页面,如图所示:

最后,整个项目就搭建完毕,需要思考的是从入门到具体应用,再到分布式组件的内部原理,还需要在工作中去实践总结经验。

相关推荐
weixin_545019322 小时前
微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)
spring boot·微信小程序·uni-app
一只码代码的章鱼4 小时前
Spring的 @Validate注解详细分析
前端·spring boot·算法
程序员小杰@5 小时前
【MCP教程系列】SpringBoot 搭建基于 Spring AI 的 SSE 模式 MCP 服务
人工智能·spring boot·spring
程序员buddha6 小时前
Spring & Spring Boot 常用注解整理
java·spring boot·spring
C_V_Better6 小时前
Java Spring Boot 控制器中处理用户数据详解
java·开发语言·spring boot·后端·spring
胡子洲6 小时前
Spring Boot 应用中实现基本的 SSE 功能
java·spring boot·后端
非著名架构师6 小时前
SpringBoot整合MQTT实战:基于EMQX构建高可靠物联网通信,从零到一实现设备云端双向对话
spring boot·mqtt·emqx
贰拾wan6 小时前
【Java-EE进阶】SpringBoot针对某个IP限流问题
java·spring boot·后端·idea
Paran-ia7 小时前
【2025版】Spring Boot面试题
java·spring boot·后端
雷袭月启7 小时前
Springboot实现重试机制
spring boot·重试机制