记录 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-providerdubbo.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 {@Overridepublic 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 {@DubboReferenceDemoService 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 {@AutowiredTask 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.mzph.cn/news/740308.shtml

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

相关文章

关于tomcat服务器配置及性能优化的20道高级面试题

1. 请描述Tomcat服务器的基本架构和组件。 Tomcat服务器的基本架构主要包括Server、Service、Connector和Container等组件。具体来看&#xff1a; Server&#xff1a;是Tomcat中最顶层的容器&#xff0c;代表着整个服务器。它负责运行Tomcat服务器&#xff0c;例如打开和关闭…

Mac上.bashrc转.zshrc时,设置PATH环境变量注意事项

由于最近系统坏了刚好就升级了&#xff0c;也就打算使用新的 zsh 了&#xff0c;反正平时在 WSL 和树莓派上用的都是 bash。按理来说应该没有什么困难&#xff0c;但还是遇到了一些问题&#xff0c;都是细节&#xff0c;需要记录一下&#xff0c;防止后续一些东西的更新比较麻烦…

React 教程

学习主要来源 React 教程 | 菜鸟教程 React 是一个用于构建用户界面的 JAVASCRIPT 库。 React 主要用于构建 UI&#xff0c;很多人认为 React 是 MVC 中的 V&#xff08;视图&#xff09;。 React 起源于 Facebook 的内部项目&#xff0c;用来架设 Instagram 的网站&#xff0…

学习笔记-华为IPD转型2020:2,IPD的核心思想

2&#xff0c;IPD的核心思想 以客户为导向&#xff1a;应该开发什么产品&#xff1f; 应该开发哪些产品&#xff1f;华为的“基本法”规定&#xff0c;其目的是为客户服务&#xff08;Huawei&#xff0c;1998&#xff09;。然而&#xff0c;在IPD实施后&#xff0c;对这种以客…

如何在mac下使用homebrew安装 mysql?

安装 Homebrew&#xff1a; 如果尚未安装 Homebrew&#xff0c;可以通过以下命令在终端中安装&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"更新 Homebrew&#xff1a; 运行以下命令以确保 Homebr…

C#/.Net 多线程下载m3u8视频

C#/.Net 多线程下载m3u8视频 下载网络文件方法下载m3u8 .HttpGet() 是我自己封装的HTTP请求方法 下载网络文件方法 /// <summary> /// 下载网络文件 /// </summary> /// <param name"url">文件地址</param> /// <param name"savePa…

视频监控/云存储EasyCVR视频融合平台设备增删改操作不生效是什么原因?

国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流&#xf…

安卓kotlin面试题 81-90

81. 简述 Kotlin 中泛型型变-协变、逆变、不变 ?Kotlin 中泛型引入了 in 和 out:逆变(In) 如果你的类是将泛型对象作为函数的参数,那么可以用 in:interface Consumer { fun consume(item: T) } 可以称其为 consumer class/interface,因为其主要是消费指定泛型对象…

手机App防沉迷系统C卷(JavaPythonC++Node.jsC语言)

智能手机方便了我们生活的同时,也侵占了我们不少的时间。"手机App防沉迷系统"能够让我们每天合理的规划手机App使用时间,在正确的时间做正确的事。 它的大概原理是这样的: 1、在一天24小时内,可注册每个App的允许使用时段; 2、一个时段只能使用一个App,举例说明…

[linux] socket 非阻塞模式使用注意事项

在使用 socket 的一些 api 的时候&#xff0c;默认情况下都是阻塞模式。比如使用 tcp socket 时&#xff0c;客户端调用 connect() 创建连接&#xff0c;connect() 返回的时候要么是创建连接成功了&#xff0c;要么是出现了错误&#xff0c;反正 connect() 返回的时候结果是确定…

Hadoop面经

hadoop原理 请说下 HDFS 的组织架构描述HDFS的读写流程HDFS 在读取文件的时候&#xff0c;如果其中一个块突然损坏了怎么办HDFS 在上传文件的时候&#xff0c;如果其中一个 DataNode 突然挂掉了怎么办 NameNode 在启动的时候会做哪些操作Secondary NameNode 了解吗&#xff0c;…

get命令使用提交代码

当你想要通过Git提交代码时&#xff0c;以下是一个详细的案例&#xff0c;包括从创建更改到推送到远程仓库的整个过程&#xff1a; 首先&#xff0c;确保你已经在本地仓库目录中进行了需要的更改。 添加更改到暂存区&#xff1a; git add . 这会将所有更改添加到Git的暂存区&…

微信小程序开发系列(二十九)·界面交互API·loading 提示框、showModal模态对话框、showToast消息提示框

目录 1. loading 提示框 1. 1 wx.showLoading()显示loading提示框 1.2 wx.hideLoading()关闭 loading 提示框 2. showModal 模态对话框 3. showToast 消息提示框 小程序提供了一些用于界面交互的 API&#xff0c;例如&#xff1a;loading 提示框、消息提示框、模态对…

高效的ElasticSearch Java API - my-elasticsearch-starter

ES Java Api有很多种&#xff0c;本文主要是基于Spring Boot进行封装的&#xff0c;为什么选择Spring Boot&#xff0c;可以看往期文章 Elasticsearch入门必读指南&#xff1a;到底选择哪个ES版本更合适 。 Spring Boot现在也是Java生态中主流的开发框架使用最广泛&#xff0c;…

信息系统项目管理师011:数字政府(1信息化发展—1.4数字中国—1.4.2数字政府)

文章目录 1.4.2 数字政府1.数字新特征2.主要内容 1.4.2 数字政府 信息技术的革新改变了人们传统的工作、学习、生活和娱乐方式&#xff0c;同时对政府提供信息服务&#xff0c;公民参与政府民主决策的方式提出了挑战。利用信息技术改进政府工作及服务的效率&#xff0c;形成新的…

python学习1:csv模块、time模块、random、jieba、worldcloud、pycharm的虚拟环境认识、black格式化文件

标准库与第三方库 模块&#xff08;modules&#xff09;&#xff1a;是包含python函数和变量的文件&#xff0c;名称符合Python标识符要求&#xff0c;并使用.py后缀 包&#xff08;package&#xff09;&#xff1a;是包含其他模块、包的文件夹。名称符合Python标识符要求&am…

安装配置HBase

HBase集群需要整个集群所有节点安装的HBase版本保持一致&#xff0c;并且拥有相同的配置&#xff0c;具体配置步骤如下&#xff1a; 1. 解压缩HBase的压缩包 2. 配置HBase的环境变量 3. 修改HBase的配置文件&#xff0c;HBase的配置文件存放在HBase安装目录下的conf中 4. 首…

蓝桥杯每日一题 走迷宫bfs 超超详细解释!!!

昨天学习了bfs的基本概念&#xff0c;今天来做一道经典习题练练手吧&#xff01; bfs常用的两类题型 1.从A出发是否存在到达B的路径(dfs也可) 2.从A出发到B的最短路径&#xff08;数小:<20才能用dfs&#xff09; 遗留的那个问题的答案- 题目&#xff1a;走迷宫 答案&…

Java爬虫-获取数据的方式之一

目录 一、jsoup的使用 1.概述 2.主要功能 3.快速入门 4.数据准备 二、Selenium 1.概述 2.使用 三、Selenium配合jsoup获取数据 四、爬虫准则 五、Seleniumjsoupmybatis实现数据保存 1.筛选需要的数据 2.创建一个表&#xff0c;准备存储数据 手写&#xff1f;不存在…

基于STM32的电动车防盗器设计

1.项目需求 点击遥控器 A 按键&#xff0c;系统进入警戒模式&#xff0c;一旦检测到震动&#xff08;小偷偷车&#xff09;&#xff0c;则喇叭发出声响报警&#xff0c; 吓退小偷。 点击遥控器 B 按键&#xff0c;系统退出警戒模式&#xff0c;再怎么摇晃系统都不会报警&#…