Springboot集成Dubbo和Zookeeper框架搭建

发布于:2025-04-02 ⋅ 阅读:(24) ⋅ 点赞:(0)

目录

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

2. 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端页面,如图所示:

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

 


网站公告

今日签到

点亮在社区的每一天
去签到