Dubbo+Zookeeper

news2025/3/6 17:23:28

Snipaste_2025-03-05_20-09-43.png

Apache ZooKeeper

通过当前页面下载Zookeeper

Snipaste_2025-03-05_20-56-27.png

Snipaste_2025-03-05_21-12-37.png

在这里启动zookeeper

可以根据这个页面简单学习一下,但是没有集成mysql,也会出现一些报错,且在这之后我们要使用的管理页面是vue的dubbo-admin

dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。-阿里云开发者社区

图文并茂,万字长文!彻底搞清楚Spring Boot 整合Dubbo+Zookeeper【分布式实战】 - 知乎

Snipaste_2025-03-05_21-08-47.png

这是我的模块设计,在设计各个模块的内容之前,先通过github获取dubbo的管理界面

通过GitHub拉取该项目apache/dubbo-admin: The ops and reference implementation for Apache Dubbo

dubbon-admin-ui的vue项目通过vscode启动的视图页面来管理dubbo的项目

npm install
下载node_modules
如果报错应该是node的版本不对,如果安装了nvm可以通过nvm切换至16.x.x版本
npm run dev
启动项目

通过root/root登录dubbo-admin
Snipaste_2025-03-05_22-25-34.png

先启动zookeeper
需要使用这个视图页面来管理dubbo的项目,我们还得启动拉取项目中的dubbo-admin-server模块并先更新完pom.xml中的依赖,maven的版本等等基本项也得改掉,之后启动项目成功便能使用这个视图页面来管理dubbo的项目

根据我的模块设计,我们开始对项目进行架构设计

先引入我们需要的总依赖

<!-- 引入dubbo -->  
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->  
<dependency>  
    <groupId>org.apache.dubbo</groupId>  
    <artifactId>dubbo-dependencies-bom</artifactId>  
    <version>3.2.5</version>  
    <type>pom</type>  
    <scope>import</scope>  
</dependency>  
  
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-x-discovery -->  
<dependency>  
    <groupId>org.apache.curator</groupId>  
    <artifactId>curator-x-discovery</artifactId>  
    <version>4.3.0</version>  
</dependency>  
  
  
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端 -->  
<dependency>  
    <groupId>org.apache.curator</groupId>  
    <artifactId>curator-framework</artifactId>  
    <version>2.12.0</version>  
</dependency>  
  
  
<dependency>  
    <groupId>org.apache.dubbo</groupId>  
    <artifactId>dubbo</artifactId>  
    <version>3.2.5</version>  
</dependency>  
  
<dependency>  
    <groupId>org.jetbrains.kotlin</groupId>  
    <artifactId>kotlin-reflect</artifactId>  
    <version>1.9.0</version>  
</dependency>  
  
  
<dependency>  
    <groupId>org.apache.dubbo.extensions</groupId>  
    <artifactId>dubbo-mock-api</artifactId>  
    <version>3.0.0</version>  
</dependency>  
  
<dependency>  
    <groupId>org.apache.curator</groupId>  
    <artifactId>curator-framework</artifactId>  
    <version>4.3.0</version>  
</dependency>  
  
<dependency>  
    <groupId>org.apache.curator</groupId>  
    <artifactId>curator-recipes</artifactId>  
    <version>4.3.0</version>  
</dependency>  
  
  
<!-- MyBatis-Plus -->  
<dependency>  
    <groupId>com.baomidou</groupId>  
    <artifactId>mybatis-plus-boot-starter</artifactId>  
    <version>3.5.3.2</version>  
</dependency>  
  
<!-- Spring Boot Web -->  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
</dependency>  
  
<dependency>  
    <groupId>org.mybatis.spring.boot</groupId>  
    <artifactId>mybatis-spring-boot-starter</artifactId>  
    <version>2.2.2</version>  
</dependency>

这里的依赖总的划分一下的话如下图所示

Snipaste_2025-03-05_21-38-16.png

Snipaste_2025-03-05_21-42-08.png

实例

pojo

@Data  
  
@AllArgsConstructor  
  
@NoArgsConstructor  
public class User implements Serializable {  
    private static final long serialVersionUID = 1L;  // 显式定义  
  
    private Long id;  
    private String name;  
}

service

public interface UserService extends IService<User> {}

Snipaste_2025-03-05_21-48-29.png

实例
控制类

@RestController  
@RequestMapping("/user")  
public class UserController {  
    private static final Logger log = LoggerFactory.getLogger(UserController.class);  
  
    @Reference(timeout = 5000, retries = 1, check = true)  
    private UserService userService;  
  
    @GetMapping("/{id}")  
    public ResponseEntity<User> getUser(@PathVariable("id") Long id) {  
        log.info("调用远程服务,用户ID: {}", id);  
        User user = userService.getById(id);  
        if (user == null) {  
            return ResponseEntity.notFound().build();  
        }  
        return ResponseEntity.ok(user);  
    }  
}

yml

server:  
  port: 8081  
spring:  
  datasource:  
    url: jdbc:mysql://localhost:3306/dubbo?useSSL=false&serverTimezone=UTC  
    username: root  
    password: 20050101  
    driver-class-name: com.mysql.cj.jdbc.Driver  
  application:  
    name: dubbo-consumer  
  
dubbo:  
  application:  
    name: dubbo-consumer  # 消费者应用名称  
    qos-enable: false     # 禁用 QoS(可选)  
  
  registry:  
    address: zookeeper://127.0.0.1:2181  # 注册中心地址(ZooKeeper)  
    # 如果使用 Nacos 注册中心,可以配置为:  
    # address: nacos://127.0.0.1:8848  
  
  protocol:  
    name: dubbo  # 使用的协议类型  
    port: 20882     # 消费者端口(通常不需要配置,Dubbo 会自动分配)  
  
  consumer:  
    check: false  # 是否在启动时检查服务提供者是否存在  
    timeout: 3000 # 调用超时时间(单位:毫秒)  
    retries: 2    # 调用失败时的重试次数  
    loadbalance: random  # 负载均衡策略(random、roundrobin、leastactive 等)  
    cluster: failover    # 集群容错策略(failover、failfast、failsafe 等)

Snipaste_2025-03-05_22-06-29.png

实例

mapper

@Mapper  
public interface UserMapper extends BaseMapper<User> {}

impl

@DubboService  
@Service  
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {}

启动类

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

yml

server:  
  port: 20881  
spring:  
  datasource:  
    url: jdbc:mysql://localhost:3306/dubbo?useSSL=false&serverTimezone=UTC  
    username: root  
    password: 20050101  
    driver-class-name: com.mysql.cj.jdbc.Driver  
  application:  
    name: dubbo-provider  
  
dubbo:  
  application:  
    name: dubbo-provider  
    qos-enable: true  
  registry:  
    address: zookeeper://127.0.0.1:2181  
  protocol:  
    name: dubbo  
    port: 20880

Snipaste_2025-03-05_22-23-11.png

启动后可以在服务关系中看见他们模块之间的关系
也可以去调用接口测试接口的使用

Snipaste_2025-03-05_22-25-34.png

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

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

相关文章

从厨电模范到数字先锋,看永洪科技如何助力方太集团开启数字新征程

在数字化洪流席卷全球的宏大背景下&#xff0c;企业转型升级的紧迫性与重要性日益凸显&#xff0c;成为驱动行业进步的关键引擎。在这一波澜壮阔的转型浪潮中&#xff0c;方太集团——厨电领域的璀璨明珠&#xff0c;以其前瞻性的战略视野和不懈的创新精神&#xff0c;携手数据…

前端基础之组件自定义事件

我们可以通过使用给组件绑定事件&#xff0c;当组件触发该事件时&#xff0c;就能进行值得返回 我们可以使用v-on属性来给子组件绑定自定义事件&#xff0c;此时该事件就会存在vc中&#xff0c;然后通过this.$emit来触发绑定的事件&#xff0c; 这样就能实现不需要app.vue来给子…

基于DeepSeek(本地部署)和RAGFlow构建个人知识库

总结自视频&#xff08;很强的小姐姐视频&#xff0c;讲解清晰明了&#xff09;&#xff1a;【知识科普】【纯本地化搭建】【不本地也行】DeepSeek RAGFlow 构建个人知识库_哔哩哔哩_bilibili 1. 背景 deepseek官方网页版也虽然很强&#xff0c;能够满足绝大部分需求&#xf…

学习工具的一天之(burp)

第一呢一定是先下载 【Java环境】&#xff1a;Java Downloads | Oracle 下来是burp的下载 Download Burp Suite Community Edition - PortSwigger 【下载方法二】关注的一个博主 【BurpSuite 安装激活使用详细上手教程 web安全测试工具】https://www.bilibili.com/video/BV…

2025-03-05 学习记录--C/C++-PTA 习题5-8 空心的数字金字塔

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、解题步骤 ⭐️ 下面以n5举例&#xff1a;&#x1f98b; 第1步 &#x1f380;、外层循环&#xff08;从1到…

vue+neo4j 四大名著知识图谱问答系统

编号: D039 视频 vueneo4j四大名著知识图谱问答系统 技术架构 vuedjangoneo4jmysql技术实现 功能模块图 问答&#xff1a;基于知识图谱检索、支持图多跳、显示推理路径 姜维的师傅的主公的臣是谁&#xff1a; 马谡 知识图谱&#xff1a;四大名著总共4个图谱 红楼梦图谱 …

【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别

1. 什么是智能体 将大语言模型作为一个推理引擎。给定一个任务&#xff0c; 智能体自动生成完成任务所需步骤&#xff0c; 执行相应动作&#xff08;例如选择并调用工具&#xff09;&#xff0c; 直到任务完成。 2. 先定义工具&#xff1a;Tools 可以是一个函数或三方 API也…

基于eRDMA实测DeepSeek开源的3FS

DeepSeek昨天开源了3FS分布式文件系统, 通过180个存储节点提供了 6.6TiB/s的存储性能, 全面支持大模型的训练和推理的KVCache转存以及向量数据库等能力, 每个客户端节点支持40GB/s峰值吞吐用于KVCache查找. 发布后, 我们在阿里云ECS上进行了快速的复现, 并进行了性能测试, ECS…

Vue的简单入门 三

目录 侦听器 watch 注意 表单输入绑定 v-model v-model修饰符​编辑 lazy number Trim 模板引用 组件组成 组件引用三步走 组件的嵌套关系 header Main Aside Aritice Item App.vue组件引入三个子组件 组件的注册方式 全局注册组件的方法 (1) Vue 2 语…

指纹细节提取(Matlab实现)

指纹细节提取概述指纹作为人体生物特征识别领域中应用最为广泛的特征之一&#xff0c;具有独特性、稳定性和便利性。指纹细节特征对于指纹识别的准确性和可靠性起着关键作用。指纹细节提取&#xff0c;即从指纹图像中精确地提取出能够表征指纹唯一性的关键特征点&#xff0c;是…

STM32——串口通信 UART

一、基础配置 Universal Asynchronous Receiver Transmitter 异步&#xff0c;串行&#xff0c;全双工 TTL电平 &#xff1a;高电平1 低电平0 帧格式&#xff1a; 起始位1bit 数据位8bit 校验位1bit 终止位1bit NVIC Settings一栏使能接受中断。 之前有设置LCD&#xff0c;…

PHP fastadmin 学习

安装php环境安装mysql插件 修改 php.ini下载 phpstudy、fastadmin 错误 安装FastAdmin could not find driver 参考链接 安装插件 创建1.php <? phpinfo(); ?>运行 http://127.0.0.1/1.php 查看 POD 页面访问404 伪静态 Apache <IfModule mod_rewrite.c> O…

Autojs无线连接vscode方法

1.获得电脑的IP 在电脑的CMD界面输入 ipconfig 然后找到ipv4的那一行&#xff0c;后面的即是你的电脑IP地址 2.打开vscode的autojs服务 安装autojs插件 在vscode界面按下ctrlshiftp 输入autojs 找到 点击 之后打开手机上的autojs 之后输入刚刚电脑上的地址 可以看到vsc…

天津大学02-深度解读DeepSeek:部署、使用、安全【文末附下载链接】

大模型风险与不当用例——价值观错位 大模型与人类价值观、期望之间的不一致而导致的安全问题&#xff0c;包含&#xff1a;• 社会偏见&#xff08;Social Bias&#xff09;LLM在生成文本时强化对特定社会群体的刻板印象&#xff0c;例如将穆斯林与恐怖主义关联&#xff0c;或…

SPI驱动(三) -- SPI设备树处理过程

文章目录 参考资料&#xff1a;一、SPI设备树节点构成二、SPI设备树示例2.1 SPI控制器节点属性2.2 SPI设备节点属性 三、SPI设备树处理过程四、总结 参考资料&#xff1a; 内核头文件&#xff1a;include\linux\spi\spi.h内核文档&#xff1a;Documentation\devicetree\bindin…

MARL零样本协调之Fictitious Co-Play学习笔记

下列引用来自知乎作者Algernon 知乎link FCP作为ZSC领域两阶段训练方法的开创者 论文《Collaborating with Humans without Human Data》来自 NeurIPS 2021。这篇论文提出 Fictitious Co-Play (FCP) 来解决 ZSC 问题。论文认为&#xff0c;ZSC 的第一个重要问题是对称性&#x…

idea中的查看git历史记录,不显示详细信息

一、正常情况显示 1、idea中git查看history正常显示如下图&#xff1a; 二、非正常情况下显示 1、idea中git查看history&#xff0c;现在不显示提交的历史文件详细信息&#xff0c;如下图&#xff1a; 三、解决方式 1、找到如下窗口中画红色框的黑色线条&#xff0c;鼠标放在…

Redis——快速入门

目录 Redis简介 安装配置(Windows) GUI工具RedisInsight的使用 十大数据类型&#xff08;5基本5高级&#xff09; 字符串String 列表List 集合Set(S) 有序集合SortedSet(Z) 哈希Hash(H) 发布订阅模式 消息队列Stream(X) 地理空间Geospatial(GEO) HyperLogLog(PF) …

LLM 模型 Prompt 工程

目录 1、Prompt 基础概念 2、Prompt 主要构成 3、Prompt 相关技术 3.1、思维链 3.2、自洽性 3.3、思维树 1、Prompt 基础概念 Prompt 工程是通过设计和优化自然语言提示&#xff08;Prompt&#xff09;&#xff0c;引导LLM生成符合特定任务需求的输出的技术。其核心目标是…

Vue中实现大文件的切片并发下载和下载进度展示

Vue中实现大文件的切片下载 切片下载需要后端提供两个接口&#xff0c;第一个接口用来获取当前下载文件的总切片数&#xff0c;第二个接口用来获取具体某一个切片的内容。 界面展示 数据流展示 代码 接口 // 切片下载-获取文件的总切片数 export function getChunkDownload…