Zookeeper注册中心实战

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

1、创建服务

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

依赖如下:

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>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 复制代码
<?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

yaml 复制代码
server:
  port: 8080 #端口

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

3、服务代码

1、实体类
java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {

    private Integer id;
    private String productName;
    private Integer productNum;
    private Double productPrice;
}
2、服务接口
java 复制代码
public interface ProviderService {
    /**
     * 查询商品列表
     *
     * @return
     */
    List<Product> selectProductList();
}
3、服务实现类
java 复制代码
@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、控制层
java 复制代码
@RestController
public class ProviderController {

    @Autowired
    private ProviderService providerService;

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

3、服务消费者

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

1、添加依赖

依赖和提供者一样

2、添加配置文件

yaml 复制代码
server:
  port: 9090 # ??

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

3、服务代码

1、控制层
java 复制代码
@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


相关推荐
心态还需努力呀15 小时前
CANN仓库通信库:分布式训练的梯度压缩技术
分布式·cann
Coder_Boy_18 小时前
基于SpringAI的在线考试系统-相关技术栈(分布式场景下事件机制)
java·spring boot·分布式·ddd
程序员泠零澪回家种桔子21 小时前
分布式事务核心解析与实战方案
分布式
liux352821 小时前
基于kubeadm部署Kubernetes 1.26.4 集群指南
云原生·容器·kubernetes
凯子坚持 c21 小时前
CANN 生态中的分布式训练利器:深入 `collective-ops` 项目实现高效多卡协同
分布式
惊讶的猫1 天前
rabbitmq实践小案例
分布式·rabbitmq
禁默1 天前
打破集群通信“内存墙”:手把手教你用 CANN SHMEM 重构 AIGC 分布式算子
分布式·重构·aigc
惊讶的猫1 天前
rabbitmq初步介绍
分布式·rabbitmq
小镇敲码人1 天前
华为CANN框架中HCCL仓库的全面解析:分布式通信的引擎
分布式·华为
User_芊芊君子1 天前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf