首页 > 其他分享 >Zookeeper注册中心实战

Zookeeper注册中心实战

时间:2024-09-02 17:53:28浏览次数:10  
标签:实战 spring Zookeeper boot springframework 注册 org cloud javaxiaobear


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

Zookeeper注册中心实战_注册中心

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

Zookeeper注册中心实战_spring_02


Zookeeper注册中心实战_zookeeper_03

标签:实战,spring,Zookeeper,boot,springframework,注册,org,cloud,javaxiaobear
From: https://blog.51cto.com/xiaobear/11899820

相关文章

  • vue3+vite注册动态路由的实践
    //route/index.jsimport{createRouter,createWebHistory}from'vue-router'importHomeViewfrom'../views/HomeView.vue'//constcomp=()=>import('../views/AboutView.vue')//console.log('comp:>>......
  • Java服务端服务注册:Consul与Eureka的高级配置
    Java服务端服务注册:Consul与Eureka的高级配置大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在微服务架构中,服务注册与发现是确保服务之间能够相互通信的关键机制。Consul和Eureka是两种流行的服务注册与发现工具。本文将介绍如何对它们进行高级配置......
  • HarmonyOS实战开发:NAPI接口规范开发
    简介NAPI(NativeAPI)组件是一套对外接口基于Node.jsN-API规范开发的原生模块扩展开发框架。图1 NAPI组件架构图NativeEngineJS引擎抽象层,统一JS引擎在NAPI层的接口行为。ModuleManager管理模块,用于模块加载、模块信息缓存。ScopeManager管理NativeValue的生命周......
  • 用Python实现时间序列模型实战——Day 8: 季节性ARIMA模型 (SARIMA)
    一、学习内容1.SARIMA模型的定义与公式推导SARIMA模型:SARIMA模型是扩展了ARIMA模型的一种方法,全称为季节性自回归积分滑动平均模型(SeasonalAutoRegressiveIntegratedMovingAverage)。它结合了ARIMA模型的非季节性部分和季节性成分,用于处理具有季节性模式的时间序......
  • Nginx 部署前端 Vue 项目实战指南
    一、环境准备1.安装Nginx首先,需要在服务器上安装Nginx。Nginx是一款轻量级、高性能的HTTP和反向代理服务器。安装方式因操作系统而异。Linux系统(以Ubuntu为例):sudoapt-getupdatesudoapt-getinstallnginxWindows系统:从Nginx官方网站下载安装包,按......
  • 网络安全ctf比赛/学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐
    前言对于想学习或者参加CTF比赛的朋友来说,CTF工具、练习靶场必不可少,今天给大家分享自己收藏的CTF资源,希望能对各位有所帮助。CTF在线工具首先给大家推荐我自己常用的3个CTF在线工具网站,内容齐全,收藏备用。1、CTF在线工具箱:http://ctf.ssleye.com/包含CTF比赛中常用的......
  • 电影票小程序API接口对接方式注册和申请接入流程
    电影票API接口对接方式注册和申请接入:注册成为合作伙伴或开发者:在API提供商处注册账号,并按照其指引填写相关信息,申请API密钥和相关文档 。了解使用条款和限制:明确API提供商的使用条款,包括请求频率限制、数据使用权限、隐私政策、版权信息、计费规则等,确保在使用过......
  • 【QTTabBar】手把手教你QTTabBar命令栏js脚本的自定义开发与实战
    本帖最后由二零一八小王子于2024-8-3121:45编辑<ignore_js_op>众所周知,360压缩有一个解压功能,也就是打开压缩包后点击“一键解压”就可解压完成并且打开目标文件夹。今天这里要实现的是在qttabbar的命令按钮,也就是上面的工具栏处,使用js编写一个一键解压功能。也就是对于一个......
  • Springboot实战——黑马点评之互斥锁
    Springboot黑马点评(3)——优惠券秒杀【还剩Redisson的最后两节没测试后续补上】另外,后期单独整理一份关于分布式锁笔记1优惠券秒杀实现1.1用户-优惠券订单设计1.1.1全局ID生成器使用数据库自增ID作为订单ID存在问题1.1.2考虑全局唯一ID生成逻辑时间戳(Long类型......
  • vue 批量自动引入并注册组件或路由
    有时候有大量的组件.vue后缀的,或.js,或.ts文件,需要一个个的手动引入很麻烦,那么你可以尝试这样创建一个index.js本项目使用vue3.x,vue2.x也可以照样用;这里在components里面创建了一个idnex.js文件require.context可以读取文件,第一个参数是指当前文件夹,第二个参......