MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

Spring Cloud Zookeeper 快速入门demo

2024-12-12 12:29 huorong 精选文章 6 ℃ 0 评论

1.什么是Spring Cloud Zookeeper ?

Spring Cloud Zookeeper 是一个用于构建分布式系统的工具,它利用 Apache Zookeeper 提供的服务来实现服务注册与发现、配置管理、负载均衡等功能。具体来说,Spring Cloud Zookeeper 可以做以下几件事情:

  1. 服务注册与发现:通过 Zookeeper,微服务可以在启动时将自己注册到 Zookeeper 中,其他服务可以通过 Zookeeper 查找并调用这些服务。
  2. 配置管理:Spring Cloud Zookeeper 可以集中管理应用程序的配置,允许开发者在 Zookeeper 中存储配置信息,并在应用启动时加载这些配置。
  3. 负载均衡:通过 Zookeeper,Spring Cloud 可以实现对服务的负载均衡,确保请求能够均匀地分配到多个服务实例上。
  4. 集群管理:Zookeeper 可以帮助管理微服务的集群状态,监控服务的健康状况,并在服务出现故障时进行相应的处理。
  5. 分布式锁:Zookeeper 提供了分布式锁的功能,可以用于控制对共享资源的访问,确保数据的一致性。
  6. 事件通知:Zookeeper 支持观察者模式,服务可以监听特定节点的变化,并在节点状态变化时收到通知,从而实现动态配置更新等功能。

2.环境搭建

docker-compose-zookeeper.yml

version: '3'
services:
  zookeeper:
    image: zookeeper:3.7.0
    container_name: zookeeper
    restart: unless-stopped
    volumes:
      - "./zookeeper/data:/data"
      - "./zookeeper/datalog:/datalog"
    ports:
      - "2181:2181"

  # webui
  zookeeper-webui:
    image: tobilg/zookeeper-webui
    container_name: zookeeper-webui
    restart: unless-stopped
    environment:
      ZK_DEFAULT_NODE: zookeeper:2181
    depends_on:
      - zookeeper
    links:
      - zookeeper
    ports:
      - "8089:8080"

docker run

docker-compose -f docker-compose-zookeeper.yml -p zookeeper up -d

可视化界面访问地址:[http://ip地址:8089] ,输入 [{宿主主机ip}:2181/]进入

3.示例场景

我们将创建两个微服务:service-aservice-bservice-a 将注册到 Zookeeper,并能够调用 service-b

1. 创建 service-a

1.1. 创建 Spring Boot 项目

使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:

  • Spring Web
  • Spring Cloud Starter Zookeeper Discovery

1.2. 添加依赖

pom.xml 中添加 Spring Cloud Zookeeper 依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

1.3. 配置 application.yml

src/main/resources/application.yml 中配置 Zookeeper 地址:

spring:
  application:
    name: service-a
  cloud:
    zookeeper:
      connect-string: localhost:2181
server:
  port: 8080

1.4. 创建 Controller

创建一个简单的 REST 控制器:

@RestController
@RequestMapping("/service-a")
public class ServiceAController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello from Service A!";
    }
}

2. 创建 service-b

1.1. 创建 Spring Boot 项目

同样使用 Spring Initializr 创建另一个 Spring Boot 项目,选择以下依赖:

  • Spring Web
  • Spring Cloud Starter Zookeeper Discovery

1.2. 添加依赖

pom.xml 中添加 Spring Cloud Zookeeper 依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

1.3. 配置 application.yml

src/main/resources/application.yml 中配置 Zookeeper 地址:

spring:
  application:
    name: service-b
  cloud:
    zookeeper:
      connect-string: localhost:2181
server:
  port: 8081

1.4. 创建 Controller

创建一个简单的 REST 控制器,调用 service-a

@RestController
@RequestMapping("/service-b")
public class ServiceBController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/call-a")
    public String callServiceA() {
        String url = "http://service-a/service-a/hello";
        return restTemplate.getForObject(url, String.class);
    }
}

1.5. 添加 RestTemplate Bean

ServiceBApplication 类中添加 RestTemplate Bean:

  • 当你在 service-b 中调用 service-a 时,如果没有使用 @LoadBalanced 注解,RestTemplate 将尝试直接使用你提供的 URL(如 http://service-a/service-a/hello)。如果 service-a 的主机名无法解析(如 UnknownHostException),则会导致调用失败。
  • 加上 @LoadBalanced 后,RestTemplate 会使用 Spring Cloud 的负载均衡机制,自动将服务名(如 service-a)解析为实际的服务实例地址。这是通过与服务注册中心(如 Zookeeper)进行交互来实现的。
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • https://github.com/Harries/springcloud-demo(Spring Cloud zookeeper)

4. 测试

分别启动 service-aservice-b。你可以在浏览器中访问以下 URL 测试:

  • 访问 service-ahttp://localhost:8080/service-a/hello
  • 访问 service-bhttp://localhost:8081/service-b/call-a,这将调用 service-a 的接口并返回结果。

5.引用

  • https://spring.io/projects/spring-cloud-zookeeper#overview
  • https://www.liuhaihua.cn/archives/711918.html

Tags:springinitializr

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言