当前位置: 首页 > news >正文

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

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

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

 

相关文章:

  • 基于 Vue + Django + MySQL 实现个人博客/CMS系统
  • 基于单片机的音乐播放器系统设计
  • FPGA学习-基于 DE2-115 板的 Verilog 分秒计数器设计与按键功能实现
  • 第一章 EDA技术概述
  • NLP高频面试题(三十)——LLama系列模型介绍,包括LLama LLama2和LLama3
  • AI原生应用爆发:从通用大模型到垂直场景的算力重构
  • C++ --- map和set的使用
  • 【Linux】高性能网络模式:Reactor 反应堆模式
  • 搞 PostgreSQL多才多艺的人--赵渝强 《PG数据库实战派》
  • 【容器】设备上没有剩余空间的错误排查处理
  • flutter WEB端启动优化(加载速度,加载动画)
  • ubuntu虚拟机裁剪img文件系统
  • WGAN的对偶性理解
  • Mybatis源码分析
  • 学习笔记--(7)
  • Linux_RHCSA笔记①
  • Vue+Elementui首页看板
  • vue中使用geoscene无法出现弹窗
  • Java项目实战--使用Java和LWJGL构建Minecraft风格游戏
  • Java对象与JSON字符串的互转
  • 印称一名高级官员在巴基斯坦发动的袭击中死亡
  • 5天完成1000多万元交易额,“一张手机膜”畅销海内外的启示
  • 总粉丝破亿!当网络大V遇见硬核科技,互联网时代如何书写上海故事?
  • 江西暴雨强对流明显,专家:落雨区高度重叠,地质灾害风险高
  • “一嗨租车”陷“五年后扣费”疑云,用户:违章处理莫名消失
  • 虚假认定实质性重组、高估不良债权价值,原中国华融资产重庆分公司被罚180万元