记录 Dubbo+Zookeeper 学习Demo

news2024/11/23 17:20:56

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.coloradmin.cn/o/1510939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webstorm 保存自动格式化

webstorm 保存自动格式化 全局安装 prettier npm i -g prettierwebstorm设置

谷歌seo外链重要还是内容重要?

想做网站&#xff0c;内容跟外链缺一不可&#xff0c;如果真的要说哪个更重要&#xff0c;那内容依旧是网站的核心&#xff0c;而外链则是额外的加分项 内容永远是王道&#xff0c;不管谷歌seo的算法怎么变&#xff0c;只要你的内容没问题&#xff0c;那就肯定不会牵扯到你的网…

【牛客】HJ73 计算日期到天数转换

目录 题目链接:计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com) 解题思路: 代码实现: 题目链接:计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com) 解题思路: 用一个数组存放每月的天数 输入的日期天数 当月的天数 当月之前的累积天数 如果包含二月&#xff0c;再去判…

新一代国产人工心脏推出,《2024心衰器械白皮书》重磅发布

2024年3月2日&#xff0c;永仁心医疗“EVA-Pulsar™新品发布会”在京举办。在国内外众多领域知名专家、投资人、企业家的共同见证下&#xff0c;永仁心最新一代EVA-Pulsar™人工心脏&#xff08;心室辅助装置&#xff09;重磅发布。 这款人工心脏集长期植入、超小体积、脉动血…

报错:Nginx 部署后刷新页面 404 问题

文章目录 问题分析解决 问题 在部署完项目后 刷新页面&#xff0c;页面进入了404 分析 加载单页应用后路由改变均由浏览器处理&#xff0c;而刷新时将会请求当前的链接&#xff0c;而Nginx无法找到对应的页面 关键代码try_files,剩下俩如果其他地方配置了则可以省略。 在这…

CentOS 7 基于开源项目制作openssh 9.7p1二进制rpm包(内含ssh-copy-id、显示openssl版本信息)—— 筑梦之路

可参考之前的文章&#xff1a;CentOS 5/6/7 基于开源项目制作openssh 9.6p1 rpm包—— 筑梦之路_centos6 openssh9.6rpm-CSDN博客 2024年3月12日 植树节制作&#xff0c;相关文件见我的资源

【Golang】Windows与Linux交叉编译保姆级教程

【Golang】Windows与Linux交叉编译 大家好 我是寸铁&#x1f44a; 总结了一篇【golang】Windows与Linux交叉编译的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 问题背景 今天寸铁想将Windows中的程序部到Linux下跑&#xff0c;我们知道在从Windows与Linux下要进行交叉编译…

韶音运动耳机好用吗?南卡、墨觉、韶音骨传导耳机三款全面评测

音乐是我生活中不可或缺的调味品&#xff0c;它伴随着我度过了无数个清晨的慢跑以及夜晚的悠闲散步。但是传统入耳式耳机总是让我感到不适&#xff0c;虽然它有着不错的降噪能力&#xff0c;但是很容易忽视周围环境的安全&#xff0c;而且运动的时候老容易掉。然后我遇到了骨传…

程序员如何设定人生目标?用OW64曼陀罗计划表!

工作后&#xff0c;我们常常过着十分紧凑的生活&#xff0c;要做的事很多&#xff0c;时间却很少&#xff0c;尤其是现在快节奏的生活&#xff0c;我们时常面临各种任务和目标&#xff0c;如何有效地管理目标和时间&#xff0c;成了一个关键问题。这个时候&#xff0c;曼陀罗计…

Spring Cloud Gateway基础内容(一)

文章目录 参考文章一、Gateway概述1、工作原理概述2、gateway特点 &#xff08;官方描述&#xff09;3、网关的重要性&#xff08;来自尚硅谷&#xff09;4、基础配置 二、简单实现SpringCloudnacos1、新建Spring项目2、添加基础的配置文件3、添加gateway配置断言规则 三、网关…

游戏行业需要堡垒机吗?用哪款堡垒机好?

相信大家对于游戏都不陌生&#xff0c;上到老&#xff0c;下到小&#xff0c;越来越多的小伙伴开始玩游戏。随着游戏用户的增加&#xff0c;如何保障用户资料安全&#xff0c;如何确保游戏公司数据安全等是一个不容忽视的问题。因此不少人在问&#xff0c;游戏行业需要堡垒机吗…

【动态规划】代码随想录算法训练营第四十六天 |139.单词拆分,关于多重背包,你该了解这些! ,背包问题总结篇!(待补充)

139.单词拆分 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词…

work 3/12

#include <iostream>using namespace std;class Rect { private:int width;int height; public:void init(int w,int h){widthw;heighth;}int set_w(int w){cin >> w;return w;}int set_h(int h){cin >> h;return h;}void show(){cout << "面积…

通过Office Web Viewer站点在线展示Office文档内容

方法&#xff1a; https://view.officeapps.live.com/op/view.aspx?src经Url编码的文档线上Url地址 比如&#xff1a; //以下地址来自一份旧项目代码&#xff0c;可见用的就是该方案function OfficeFileViewOnline(url, file_type, file_name) {url "http://14.23.112.2…

Docker容器化技术(数据卷的管理)

数据卷 是一个可供容器使用的特殊目录&#xff0c;它将主机操作系统目录直接 映射进容器&#xff0c;类似于 Linux 中的 mount 行为 。 数据卷&#xff1a;可以提供很多有用的特性 数据卷可以在容器之间共事和重用&#xff0c;容器间传递数据将变得高效与方便&#xff1b;对数…

week06 day04 (数据库高级函数 procedure 、sql写函数)

一. ER模型 矩形&#xff1a; 代表实体椭圆&#xff1a;代表实体的属性菱形&#xff1a;relation 代表实体之间的关系 二. 存储过程&#xff08;procedure&#xff09; 1. 语法 语法: create procedure 存储过程名(参数,…) begin//代码 end// 注意&#xff1a; 因为在存储…

数据结构——堆的应用 堆排序详解

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

[Prob] Definition 3.7.5 (Function of two r.v.s)

定义3.7.5&#xff08;两个随机变量的函数&#xff09;&#xff1a;给定一个样本空间 \( S \) 的实验&#xff0c;如果 \( X \) 和 \( Y \) 是映射 到X(s) 和 Y(s) 的随机变量&#xff0c;那么 g(X, Y) 就是映射 s 到 g(X(s), Y(s)) 的随机变量。 请注意&#xff0c;我…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DatePicker)

日期选择器组件&#xff0c;用于根据指定日期范围创建日期滑动选择器。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DatePicker(options?: DatePickerOptions) 根据指定范…

SAP 批量删除工艺路线和主配方_简介

通常我们在创建工艺路线的时候或者在导入工艺路线的时候,会存在数据导入出错,或者你创建的工艺路线需要删除的情况,通常情况下我们第一个想到的就是使用CA02或者C202去删除工艺路线或者是主配方。但是这样会存在一个问题就是,首先我们知道工艺路线和主配方都是存在在组里面…