热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用zookeeper代替eureka

本文主要分享【zookeeper定义】,技术文章【使用zookeeper代替eureka】为【洒脱的智障】投稿,如果你遇到SpringCloud相关问题,本文相关知识或能到你。zookeeper定义

本文主要分享【zookeeper定义】,技术文章【使用zookeeper代替eureka】为【洒脱的智障】投稿,如果你遇到SpringCloud相关问题,本文相关知识或能到你。

zookeeper定义

使用zookeeper代替eureka 背景

项目目前使用的eureka版本是1.10.17,该版本是目前最新的版本,这个版本是2021年9月份发布的,到现在也已经快一年没有更新过了。而且eureka2.x版本也停止了开发,所以需要寻找eureka的替换组件。本文就简单梳理下在Spring Cloud中使用zookeeper来替代eureka作为服务注册中心。

软件版本

本次使用的软件版本如下:

zookeeper 3.8.0

Spring Cloud 2021.0.2

Spring Boot 2.6.7

部署zookeeper

下载zookeeper软件包

上传到服务器并解压

tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz

进入conf目录,重命名配置文件zoo_sample.cfg为zoo.cfg,并且配置数据目录

使用zookeeper代替eureka

进入bin目录,执行zkServer.sh脚本,启动zookeeper

sh zkServer.sh start
Spring Cloud Zookeeper配置

Spring Cloud中提供了zookeeper的集成,其实只要修改依赖和配置文件,就可以完成eureka的替换。下面整理了如何使用zookeeper来替换eureka中提供的能力。

本次测试的工程如下,提供一个客户端和一个服务端。

使用zookeeper代替eureka

服务注册发现

添加如下依赖:

<dependency>
  <groupId>org.springframework.cloud
     groupId> <artifactId>spring-cloud-starter-zookeeper-all
      artifactId> 
       dependency> <dependency> <groupId>org.springframework.boot
        groupId> <artifactId>spring-boot-starter-actuator
         artifactId> 
          dependency> 

启动类上添加@EnableDiscoveryClient,这边还是和eureka一样:

/** * 客户端 * * @author yuanzhihao * @since 2022/7/13 */
@RequestMapping("/zk-client")
@RestController
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients("com.yzh.zookeeper.feign")
@Slf4j
public class ClientApplication {
   }

配置文件中添加zookeeper连接的信息:

spring:
  application:
    name: zookeeper-client
  cloud:
    zookeeper:
      connect-string: 10.211.55.3:2181

启动服务,然后在zookeeper中就可以看见服务已经注册到了services节点下:

使用zookeeper代替eureka


获取node节点信息:

使用zookeeper代替eureka


关闭服务,对应节点也会被删除,同时,服务的根节点也可以通过配置spring.cloud.zookeeper.discovery.root进行修改,默认为services:

spring:
  application:
    name: zookeeper-server
  cloud:
    zookeeper:
      connect-string: 10.211.55.3:2181
      discovery:
        root: /yzh-services # 设置服务发现的root节点

使用zookeeper代替eureka

客户端负载均衡

负载均衡和eureka作为服务注册中心使用一样,通过@LoadBalanced注解,在使用RestTemplate访问其他微服务时,可以用微服务的注册名称。具体代码:

RestTemplate restTemplate;

@Bean
@LoadBalanced
RestTemplate restTemplate() {
   
  this.restTemplate = new RestTemplateBuilder().build();
  return this.restTemplate;
}

@GetMapping("/hello/rst")
public String helloByRestTemplate() {
   
  String result = restTemplate.getForObject("http://zookeeper-server/hello", String.class);
  return "rst " + result;
}

请求验证ok:

使用zookeeper代替eureka

对Spring Cloud OpenFeign的支持

OpenFeign也可以通过微服务的注册名称实现服务间的访问,使用方法和之前也一致。

添加feign接口:

@FeignClient(value = "zookeeper-server")
public interface ZkServerFeign {
   
    @RequestMapping(value = "zk-server/hello", method = RequestMethod.GET)
    String hello();
}

添加@EnableFeignClients注解指定扫描的包:

@EnableFeignClients("com.yzh.zookeeper.feign")

注入feign客户端,验证请求ok:

@Autowired
private ZkServerFeign serverFeign;

@GetMapping("/hello/feign")
public String helloByFeign() {
   
  String result = serverFeign.hello();
  return "feign " + result;
}

使用zookeeper代替eureka

结语

Spring Cloud对zookeeper的适配并不像eureka那么完整,比如ssl,鉴权等等,对于一些安全整改可能要自己做一部分适配。也有一些其他的替换方案,比如nacos,consul,大家可以对比参考下。

参考:
https://docs.spring.io/spring-cloud-zookeeper/docs/current/reference/html/
代码地址:
https://github.com/yzh19961031/SpringCloudDemo/tree/main/zookeeper-client
https://github.com/yzh19961031/SpringCloudDemo/tree/main/zookeeper-server

本文《使用zookeeper代替eureka》版权归洒脱的智障所有,引用使用zookeeper代替eureka需遵循CC 4.0 BY-SA版权协议。


推荐阅读
author-avatar
张心虚要加油
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有