记录 Dubbo+Zookeeper 学习Demo

Dubbo+Zookeeper

  • Zookeeper
    • Zookeeper 下载
    • 可能出现的问题
  • 辅助程序
    • 下载dubbo-admin
    • 项目打包
    • 工程打包
    • 常见问题
  • SpringBoot集成Dubbo
    • 项目依赖
    • 定义服务接口
    • 服务端实现
      • 服务端配置依赖
      • 代码实现
    • 消费端实现
      • 服务端配置依赖
      • 代码实现
    • 启动

结合Dubbo官网学习如何完成SpringBoot+Dubbo+Zookeeper集成的学习,本次采用环境如下:

  • 开发工具:IntelliJ IDEA Community Edition 2023.2.5 (IDEA社区版 2023.2.5)
  • 开发环境:JDK 1.8,Windows 11
  • Dubbo 3.2.0-beta.4,SpringBoot 2.7.8, Zookeeper 3.8.4
  • 辅助程序:dubbo-admin-develop

Zookeeper

Zookeeper 下载

下载地址:https://zookeeper.apache.org/releases.html#news
在这里插入图片描述
下载解压完毕后找到apache-zookeeper-3.8.4-bin/bin目录启动zkServer.cmd和zkcli.cmd文件,测试是否能够联通
在这里插入图片描述
出现以下效果说明zookeeper测试成功
在这里插入图片描述

可能出现的问题

启动zkServer.cmd时出现闪退
排除方法:使用文本编辑器打开zkServer.cmd文件,在末尾添加pause,解除闪退查看原因
在这里插入图片描述
截断之后发现原因时在conf文件夹下缺少zoo.cfg文件,那么复制zoo_sample.cfg文件修改成zoo.cfg即可,当然也可以自己编辑cfg的内容
在这里插入图片描述

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
admin.serverPort=8888

辅助程序

dubbo-admin-develop 主要是进入到dubbo-admin页面,可以查看服务提供者提供了什么服务,启动后页面如下:
在这里插入图片描述

下载dubbo-admin

下载地址:https://gitee.com/apache-dubbo/dubbo-admin

dubbo-admin环境:Node.js v16.3.0,npm 7.15.1,Maven 3.8.8,JDK 1.8,Zookeeper 3.8.4

项目打包

首先需要完成前端工程,打开项目,进入dubbo-admin-ui文件,进入命令行模式(cmd),执行npm install 下载前端node_modules,完毕后再次运行命令npm run dev
在这里插入图片描述
完成前端工作后,回到dubbo-admin-develop文件夹,进入命令行模式(cmd),执行mvn package -Dmaven.test.skip=true ,打包整体项目,完成之后进入到

工程打包

常见问题

常见问题见:https://blog.csdn.net/qq_43780610/article/details/136622497?spm=1001.2014.3001.5501

SpringBoot集成Dubbo

由于本人使用的社区版,所以搭建Springboot的方式是创建Maven项目,然后通过Maven配置SpringBoot依赖,觉得麻烦的可以自己去SpringBoot官网下载或者使用非社区版。
在这里插入图片描述

项目依赖

<?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>org.example</groupId>
    <artifactId>Dubbo-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>gmall-interface</module>
        <module>dubbo-service-consumer</module>
        <module>dubbo-service-provider</module>
    </modules>

    <properties>
        <dubbo.version>3.2.0-beta.4</dubbo.version>
        <spring-boot.version>2.7.8</spring-boot.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <!--   引入公共api -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
                <version>3.2.0-beta.4</version>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

定义服务接口

服务接口 Dubbo 中沟通消费端和服务端的桥梁。
在这里插入图片描述
gmall-interface模块的com.chen.gmall.serviceImpl创建接口类DemoService

package com.chen.gmall.service;

public interface DemoService {

    String sayHello(String name);
}

服务端实现

服务端配置依赖

在这里插入图片描述

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.example</groupId>
        <artifactId>Dubbo-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>dubbo-service-provider</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

        <!-- dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-reload4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- spring boot starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>gmall-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>
</project>

application.properties

server.port=8080
# 在注册中心的服务名
dubbo.application.name=dubbo-springboot-service-provider

dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
# 注册中心地址
dubbo.registry.address=zookeeper://${zookeeper.address:127.0.0

代码实现

dubbo-service-provider模块的com.chen.gmall.serviceImpl实现DemoServiceImpl类,类上使用@DubboService注解,表示此类中的方法注册到注册中心中,消费者可以通过相同注解调用此类服务
注意:该实现类实现的接口是的gmall-interface的接口类,要想能够引入需要在pom.xml中引入依赖
DemoServiceImpl.java

package com.chen.gmall.serviceImpl;

import com.chen.gmall.service.DemoService;
import org.apache.dubbo.config.annotation.DubboService;

//注:在DemoServiceImpl 类中添加了 @DubboService 注解,通过这个配置可以基于 Spring Boot 去发布 Dubbo 服务
@DubboService
public class DemoServiceImpl implements DemoService {


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

启动类 ProviderApplication

package com.chen.gmall;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

消费端实现

服务端配置依赖

在这里插入图片描述

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.example</groupId>
        <artifactId>Dubbo-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>dubbo-service-consumer</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <dependencies>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-reload4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

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

        <dependency>
            <groupId>org.example</groupId>
            <artifactId>gmall-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

application.properties

server.port=8081
# 在注册中心的服务名
dubbo.application.name=dubbo-springboot-service-consumer
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
  # 注册中心地址
dubbo.registry.address=zookeeper://${zookeeper.address:127.0.0.1}:2181

代码实现

dubbo-service-consumer模块的com.chen.gmall.serviceImpl实现Task 类,使用@DubboReference注入服务提供方提供的实现类,消费者可以使用这个类调用服务方该类下的所有方法

package com.chen.gmall.serviceImpl;

import com.chen.gmall.service.DemoService;
import com.chen.gmall.service.consumerTask;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;

@Component
public class Task implements consumerTask {

    @DubboReference
    DemoService demoService;

    public void Task(){
        String result = demoService.sayHello("Dubbo!");
        System.out.println("result =======> " + result);

        new Thread(() -> {
            while (true){
                try{
                    Thread.sleep(1000);

                    System.out.println("Thread Result ======> " + result);
                }catch (Exception e){
                    e.printStackTrace();
                    Thread.currentThread().interrupt();
                }
            }
        }).start();
    }
}

启动类 ConsumerApplication

package com.chen.gmall;


import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {
    public static void main(String[] args){
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

Controller
创建Controller的目的为了测试用,看看是否能够调通服务类方法

package com.chen.gmall.Controller;

import com.chen.gmall.serviceImpl.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConsumerController {

    @Autowired
    Task task;

    @GetMapping("/demoTest")
    public void demoTest() {
        System.out.println(" ==========================Starting demo=========================");
        task.Task();
    }
}

接口类 consumerTask

package com.chen.gmall.service;

import org.springframework.stereotype.Service;

@Service
public interface consumerTask {
    public void Task();
}

启动

首先,需要启动Zookeeper,在启动服务端和消费端代码,随后启动dubbo-admin,查看是否存在dubbo-service-provider的服务,如果有说明成功了,然后调用localhost:8081/demoTest,查看是否输出结果
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/454472.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springBoot整合Redis(三、整合Spring Cache)

缓存的框架太多了&#xff0c;各有各的优势&#xff0c;比如Redis、Memcached、Guava、Caffeine等等。 如果我们的程序想要使用缓存&#xff0c;就要与这些框架耦合。聪明的架构师已经在利用接口来降低耦合了&#xff0c;利用面向对象的抽象和多态的特性&#xff0c;做到业务代…

Cesium ion 简介

Cesium ion SaaS 是一个强大、可扩展且安全的 3D 地理空间数据平台。可以上传您的数据&#xff0c;Cesium ion 会将其优化为 3D Tiles&#xff0c;并将其托管在云端&#xff0c;并将其流式传输到任何设备。 Cesium ion 包括访问精选的全球 3D 内容&#xff0c;包括 Cesium Wor…

jeecg 项目 springcloud 项目有一个模块 没加载进来 只需要 把这个模块放到 可以加载到模块的位置 刷新依赖

springcloud 项目有一个模块 没加载进来 只需要 把这个模块放到 可以加载到模块的位置 刷新依赖

04-自媒体文章-自动审核

自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后&#xff0c;开始审核文章 2 审核的主要是审核文章的内容&#xff08;文本内容和图片&#xff09; 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片&#xff0c;由于图片存储到minIO中&…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测软件(Python+PySide6界面+训练代码)

摘要&#xff1a;开发高效的零售柜商品识别系统对于智能零售领域的进步至关重要。本文深入介绍了如何运用深度学习技术开发此类系统&#xff0c;并分享了全套实现代码。系统采用了领先的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5进行了性能比较&#xff0c;呈现了诸如…

算法学习系列(四十):贡献法

目录 引言概念一、孤独的照片二、牛的基因学三、字串分值 引言 关于这个贡献法考的不是很多&#xff0c;主要题型是出现在需要枚举每一个组合这类题&#xff0c;出现的次数较多。没有固定的模板&#xff0c;就是一种思想&#xff0c;跟贪心一样&#xff0c;每个题都是不一样的…

基于opencv的手势识别

当然可以&#xff0c;下面是一个使用OpenCV实现简单手势识别&#xff0c;并在摄像头捕捉的视频中描绘出手部轮廓为线条的示例。该代码会读取摄像头流&#xff0c;然后检测出手部&#xff0c;并用线条描绘出手的轮廓。 首先&#xff0c;你需要安装OpenCV库。如果你还没有安装&am…

C# 第三方曲线库及其特点

在 C# 中&#xff0c;有几个第三方库可以用于绘制曲线图&#xff0c;每个库都有自己的特点和优势。以下是一些常见的 C# 第三方曲线库及其特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.LiveC…

普通人也能年入百万的超级秘籍!2024超级机会,低薪人的第二事业

一、选对行业与把握时机尤为关键。 入场时机的选择&#xff0c;往往决定了你的起跑线。那些在行业赛道上升期便早早布局的人&#xff0c;无疑占据了极大的优势。想象一下&#xff0c;你置身于一个市场需求持续增长、发展空间巨大的行业&#xff0c;成功的机会自然大增。比如现…

Parade Series - WebRTC ( < 300 ms Low Latency )

Parade Series - FFMPEG (Stable X64) C:\Conda\parading-cam>ffmpeg -f dshow -i video"Surface Camera Front" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -an -rtsp_transport tcp -f rtsp://127.0.0.1:8554/cam0801

生存预后不显著?最佳阈值来帮你!| 附完整代码 + 注释

大家在进行生存预后分析时发现结果不显著&#xff0c;是不是当头一棒&#xff01;两眼一黑&#xff01;难不成这就代表我们的研究没意义吗&#xff1f;NONONO&#xff01;别慌&#xff01;说不定还有救&#xff01;快来看看最佳阈值能不能捞你一把&#xff01; 对生存分析感兴趣…

DAY by DAY 史上最全的Linux常用命令汇总----man

man是按照手册的章节号的顺序进行搜索的。 man设置了如下的功能键&#xff1a; 功能键 功能 空格键 显示手册页的下一屏 Enter键 一次滚动手册页的一行 b 回滚一屏 f 前滚一屏 q 退出man命令 h 列出所有功能键 /word 搜索word字符串 注意&#xff1a…

多数问题求解之蒙特卡洛与分治法

多数问题&#xff08;Majority Problem&#xff09;是一个有多种求解方法的经典问题&#xff0c;其问题定义如下&#xff1a; 给定一个大小为 n n n的数组&#xff0c;找出其中出现次数超过 n / 2 n/2 n/2的元素 例如&#xff1a;当输入数组为 [ 5 , 3 , 5 , 2 , 3 , 5 , 5 ] […

Qt 如何搭建Lua的运行环境

一、Lua简介 Lua 是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程&#xff08;procedural&#xff09;编程、面向对象编程、函数式编程以及数据描述。Lua 是动态类型的&#xff0c;运行速度快&#xff0c;支持自动内存管理&#xff0c;因此被广泛用于配置、脚本…

java-集合工具类Collections

我们在使用它的时候记得导包 常见API 我们就简单看看第一第二个方法&#xff0c;代码如下&#xff0c;其余的知道用就行

基于经验模式分解和小波阈值的自适应降噪研究_杨铮

目的 针对轴承信号在采集过程中容易受到不同环境下噪声干扰&#xff0c;提出EMD分解结合小波阈值的自适应降噪的方法&#xff0c;对轴承振动信号进行降噪处理&#xff0c;提取出所需要的振动信号。方法 首先对含有噪声的轴承信号进行EMD分解&#xff0c;得到n个IMF并进行小波阈…

GUROBI之数学启发式算法Matheuristics

参考运小筹的帖子&#xff1a;优化求解器 | Gurobi 数学启发式算法&#xff1a;参数类型与案例实现 - 知乎 (zhihu.com) 简言之&#xff0c;数学启发式是算法就是数学规划和启发式算法的融合&#xff0c;与元启发式算法相比&#xff0c;数学启发式算法具有更强的理论性。 在GUR…

C++初阶

1.缺省参数 给缺省参数的时候&#xff0c;不能声明&#xff0c;定义同时给&#xff0c;只能声明的时候给缺省参数&#xff0c;同时给程序报错&#xff1b; 2.函数重载 C语言不允许同名函数的存在&#xff0c;函数名不能相同&#xff0c;C引入函数重载&#xff0c;函数名可以…

SOLIDWORKS 2024新版价格 SOLIDWORKS2024专业版白金版多少钱?

达索 SOLIDWORKS 一直以来都致力于让每位设计师和工程师的设计都触手可及。SOLIDWORKS贯彻的使命就是通过功能强大且易于使用的产品开发解决方案&#xff0c;在创造、协作和提供创新的产品体验方面助您一臂之力。SOLIDWORKS 2024延续了这一期望&#xff0c;同时开启了强化使用S…

Altium Designer快速入门及项目实战教程之PCB设计(四)

一、引言 在我们的Altium Designer系列教程中&#xff0c;我们已经一起走过了软件界面的初识、原理图的绘制&#xff0c;以及元件库的建立。今天&#xff0c;我们将进入这一系列教程的高潮部分——PCB设计。 PCB设计不仅是电子产品开发过程中的核心&#xff0c;也是检验一个电…
最新文章