Zookeeper注册中心实战

news2024/11/27 11:44:06

Java学习手册+面试指南:https://javaxiaobear.cn

Spring Cloud Zookeeper通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法,为 Spring Boot 应用程序提供Apache Zookeeper集成。通过一些简单的注释,您可以快速启用和配置应用程序内的常见模式,并使用 Zookeeper 构建大型分布式系统。提供的模式包括服务发现和分布式配置。

特征

  • 服务发现:实例可以向 Zookeeper 注册,客户端可以使用 Spring 管理的 bean 发现实例
  • 支持 Spring Cloud LoadBalancer - 客户端负载均衡解决方案
  • 支持Spring Cloud OpenFeign
  • 分布式配置:使用Zookeeper作为数据存储

官方地址:https://spring.io/projects/spring-cloud-zookeeper#lea

image-20231226133954997

1、创建服务

创建名为:spring-cloud-zookeeper项目,

依赖如下:

<?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>com.javaxiaobear</groupId>
        <artifactId>javaxiaobear-zookeeper</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>spring-cloud-zookeeper</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.cloud.version>2023.0.0</spring.cloud.version>
        <spring.boot.version>3.2.1</spring.boot.version>
    </properties>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

2、服务提供者

服务提供者名字为:javaxiaobear-provider

1、添加依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.2.1</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.javaxiaobear</groupId>
	<artifactId>javaxiaobear-provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>javaxiaobear-provider</name>
	<description>javaxiaobear-provider</description>
	<properties>
		<java.version>21</java.version>
		<spring-cloud.version>2023.0.0</spring-cloud.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
		</dependency>
		<!-- spring boot web 依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- lombok 依赖 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

2、配置文件application.yml

server:
  port: 8080 #端口

spring:
  application:
    name: product-service # 服务名称
  #  ZooKeeper 配置
  cloud:
    zookeeper:
      discovery:
        enabled: true # ?????? ZooKeeper ????????????? false ??
      connect-string: ip:2181

3、服务代码

1、实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {

    private Integer id;
    private String productName;
    private Integer productNum;
    private Double productPrice;
}
2、服务接口
public interface ProviderService {
    /**
     * 查询商品列表
     *
     * @return
     */
    List<Product> selectProductList();
}
3、服务实现类
@Slf4j
@Service
public class ProviderServiceImpl implements ProviderService {
    @Override
    public List<Product> selectProductList() {

        log.info("商品服务查询商品信息...");
        return Arrays.asList(
                new Product(1, "小米手机", 1, 5800D),
                new Product(2, "小熊面试手册", 1, 68.88D),
                new Product(3, "小熊笔记", 5, 20.20D)
        );
    }
}
4、控制层
@RestController
public class ProviderController {

    @Autowired
    private ProviderService providerService;

    @GetMapping("/list")
    public List<Product> selectList(){
        return providerService.selectProductList();
    }
}

3、服务消费者

服务提供者名字为: javaxiaobear-consumer

1、添加依赖

依赖和提供者一样

2、添加配置文件

server:
  port: 9090 # ??

spring:
  application:
    name: consumer-service # ????
  # ?? ZooKeeper ????
  cloud:
    zookeeper:
      discovery:
        enabled: true # ?????? ZooKeeper ????????????? false ??
      connect-string: ip:2181

3、服务代码

1、控制层
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
    @Autowired
    private DiscoveryClient discoveryClient;
    @GetMapping("/go")
    public void order() {
        //调用提供者服务
        List<ServiceInstance> providerServer = discoveryClient.getInstances("product-service");

        if (0 == providerServer.size()) {
            return;
        }

        ServiceInstance serviceInstance = providerServer.get(0);
        System.out.print(serviceInstance.getUri() + " --- ");
        //获取接口路径
        String url = serviceInstance.getUri() + "/list";


        RestTemplate restTemplate = new RestTemplate();
        //调用接口
        String str = restTemplate.getForObject(url, String.class);
        System.out.println(str);
    }

}

4、测试

访问路径:http://localhost:9090/consumer/go

image-20231226160725386
在这里插入图片描述

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

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

相关文章

一起学Elasticsearch系列-Mapping

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 文章目录 Mapping 的基本概念查看索引 Mapping 字段数据类型数字类型基本数据类型Keywords 类型日期类型对象类型空间数据类型文档排名类型文本搜索类型 两种映射类型自动映…

IRQ Handler 的使用——以USART串口接收中断分别在标准库与HAL库版本下的举例

前言&#xff1a; 1.中断系统及EXTI外部中断知识点见我的博文&#xff1a; 9.中断系统、EXTI外部中断_eirq-CSDN博客文章浏览阅读301次&#xff0c;点赞7次&#xff0c;收藏6次。EXTI&#xff08;Extern Interrupt&#xff09;外部中断EXTI可以监测指定GPIO口的电平信号&…

Group k-fold解释和代码实现

Group k-fold解释和代码实现 文章目录 一、Group k-fold解释和代码实现是什么&#xff1f;二、 实验数据设置2.1 实验数据生成代码2.2 代码结果 三、实验代码3.1 实验代码3.2 实验结果3.3 结果解释 四、总结 一、Group k-fold解释和代码实现是什么&#xff1f; 0&#xff0c;1…

MP4文件中mvhd容器中的“下一个track ID”字段的作用是什么?(下一个轨道id)(新轨道id)

文章目录 mvhd容器中有以下字段其中有个“下一个track ID”字段不知道是干什么用的&#xff0c;它被放在这个mvhd容器的最后“下一个track ID”什么是“下一个track ID”“下一个track ID”的作用唯一性标识轨道管理 “下一个track ID”的必要性命令/代码演示 新轨道ID的含义和…

MySQL8.0 ROW_NUMBER 调用案例

ROW_NUMBER()是一个窗口函数或分析函数&#xff0c;它为从1开始应用的每一行分配一个序号。 创建表和生成所需要的数据 CREATE TABLE chapter11 ( shopname VARCHAR(255) NULL, sales VARCHAR(255) NULL, sale_date DATE NULL ); INSERT INTO chapter11 (shopname, sales, sal…

C语言之scanf浅析

前言&#xff1a; 当有了变量&#xff0c;我们需要给变量输入值就可以使用scanf函数&#xff0c;如果需要将变量的值输出在屏幕上的时候可以使用printf函数&#xff0c;如&#xff1a; #include <stdio.h> int main() {int score 0;printf("请输⼊成绩:");sc…

《2023年企业IoT和OT威胁报告》:物联网恶意软件攻击增长400%

内容概括&#xff1a; 物联网&#xff08;IoT&#xff09;设备无疑改变了我们生活、工作和管理运营技术&#xff08;OT&#xff09;环境的方式。总体而言&#xff0c;到2027年&#xff0c;全球物联网设备数量预计将超过290亿&#xff0c;比2023年的167亿大幅增加。设备和智能技…

中文数字的魅力:古今中外的传承与创新

一、引言 中文数字&#xff0c;作为世界上最古老、最具特色的数字系统之一&#xff0c;已经伴随着中华文化走过了几千年的历史。它既是我们祖先智慧的结晶&#xff0c;也是现代生活中不可或缺的元素。本文将从各个方面介绍和解释中文数字的用途&#xff0c;带领大家领略中文数…

Python编程新技能:如何优雅地实现水仙花数?

水仙花数&#xff08;Narcissistic number&#xff09;也被称为阿姆斯特朗数&#xff08;Armstrong number&#xff09;或自恋数等&#xff0c;它是一个非负整数&#xff0c;其特性是该数的每个位上的数字的n次幂之和等于它本身&#xff0c;其中n是该数的位数。简单来说&#x…

渗透线上下料控制(SCL源代码)

有关渗透线的其它详细介绍请参考下面链接文章&#xff1a; https://rxxw-control.blog.csdn.net/article/details/133611151https://rxxw-control.blog.csdn.net/article/details/133611151这里的渗透线上下料属于整个渗透线流程里的最前端和最后端&#xff0c;分别负责待处理…

Unity坦克大战开发全流程——游戏场景——主玩家——可击毁箱子

游戏场景——主玩家——可击毁箱子 添加特效 CubeObj的代码如下 using System.Collections; using System.Collections.Generic; using UnityEngine;public class CubeObj : MonoBehaviour {//关联的奖励物品public GameObject[] rewardObjects;//关联的特效public GameObject …

大模型入门0: 基础知识

transformerscaling law分布式训练 自然语言处理包括几大任务 NLP: 文本分类&#xff0c;词性标注&#xff0c;信息检索NLG&#xff1a;机器翻译&#xff0c;自动摘要&#xff0c;问答QA、对话机器ChatBot下游任务: 词性标注&#xff08;POS&#xff09;&#xff0c;句法分析…

计算机网络(1)

计算机网络&#xff08;1&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 计算机网络和因特网&#xff08;1&#xff09;因特网概念解读服务常见的服务 协议网络边缘特点强调 网络核心特点强调 小程一言 我的计算机网络专栏&#xff0c;是自己在计算机网络…

Django开发3

Django开发3 Django开发编辑用户9.靓号管理9.1 表结构9.2 靓号列表9.3 新建靓号9.4 编辑靓号9.5 搜索手机号9.6 分页 10.时间插件11.ModelForm和BootStrap操作 各位小伙伴想要博客相关资料的话关注公众号&#xff1a;chuanyeTry即可领取相关资料&#xff01; Django开发 部门管…

simulink代码生成(五)——ePWM模块初级应用

前面分别讲到了SCI及ADC的配置及使用&#xff0c;现在梳理一下ePWM的配置和使用&#xff1b; 先打一些基础的DSP28335的基础知识&#xff1b; F28335 关于ePWM中断与SOC采样信号的一些思考_socasel-CSDN博客 F28335 ePWM模块简介——TMS320F28335学习笔记&#xff08;四&…

普通人变现天花板,月入10w是什么体验?

我是顺哥&#xff08;shundazy1&#xff09;&#xff0c;一个三观超正的6年互联网创业者&#xff0c;信因果、利他思维一直伴随着我的商业生涯。 经历过无数风风雨雨&#xff0c;实现过年入几百万&#xff0c;也曾在一年内亏了100多万。 我们项目的网站 首先介绍我们项目干啥…

消融实验(ablation study)——全网最全解读

消融实验&#xff08;ablation study&#xff09; 是什么优势与劣势案例总结 是什么 消融实验是一种科学研究方法&#xff0c;用于确定一个条件或参数对结果的影响程度。当研究者提出了一个新的方案或方法时&#xff0c;消融实验通过逐一控制一个条件或参数&#xff0c;来观察…

24届春招实习必备技能(一)之MyBatis Plus入门实践详解

MyBatis Plus入门实践详解 一、什么是MyBatis Plus? MyBatis Plus简称MP&#xff0c;是mybatis的增强工具&#xff0c;旨在增强&#xff0c;不做改变。MyBatis Plus内置了内置通用 Mapper、通用 Service&#xff0c;仅仅通过少量配置即可实现单表大部分 CRUD 操作&#xff0…

2024年山东省中职“网络安全”试题——B-3:Web安全之综合渗透测试

B-3&#xff1a;Web安全之综合渗透测试 服务器场景名称&#xff1a;Server2010&#xff08;关闭链接&#xff09; 服务器场景操作系统&#xff1a;"需要环境有问题加q" 使用渗透机场景Kali中的工具扫描服务器&#xff0c;通过扫描服务器得到web端口&#xff0c;登陆…

Kasada p.js (x-kpsdk-cd、x-kpsdk-ct、integrity)

提供x-kpsdk-cd的API服务 详细请私信~ 可试用~ V:zhzhsgg 一、简述 integrity是通过身份验证Kasada检测机器人流量后获得的一个检测结果&#xff08;数据完整性&#xff09; x-kpsdk-cd 是经过编码计算等等获得。当你得到正确的解决验证码值之后&#xff0c;解码会看到如下图…