SpringCloud 整合 Zookeeper 实现服务注册中心

转载声明 : 该文章出处为 扛麻袋的少年


写在开头

  接上一篇文章:Spring Cloud 整合 Eureka 实现服务注册中心。随着 Eureka 2.0 的闭源停更。Eureka 作为 Spring Cloud 优先选择的服务注册与发现组件,它的太子之位也就不保了。

  我们可以通过 Eureka GitHub wiki 页 来了解一下 Eureka。在文中有这样一句内容:Eureka 1.x is a core part of Netflix's service discovery system and is still an active project.。虽说 Eureka 2.0 已经停更了,但是 1.0 版本还是活跃着的。所以针对部分企业来说,Eureka 功能够用即可,一般开发中也不会用到更多的内容。所以企业中是否要抛弃 Eureka 另寻新欢,根据实际情况决定吧。

  大多数企业出于成本考虑,都会拿 ZooKeeper 来替代 Eureka。此时如果你的项目使用的是 Dubbo + Zookeeper 方案,现在想要替换成 Spring Cloud 的话,那么 Zookeeper 作为 Spring Cloud 的服务注册中心就再熟悉不过了。(因为Dubbo推荐使用 Zookeeper 作为服务注册中心)

  Zookeeper 可以作为 Dubbo 推荐的服务注册中心,那么 Zookeeper 也就完全可以替代 Eureka 来实现服务注册与发现了。(不过实际开发中,使用 Zookeeper 替代 Eureka 还是不多。因为还有更好的 Nacos)

Zookeeper服务注册中心架构

在这里插入图片描述

准备工作

1.Zookeeper 准备

  既然要使用 Zookeeper 作为 Spring Cloud 的服务注册中心,那么首先就得来安装一个 Zookeeper 了。安装步骤,请参考:ZooKeeper集群的安装。你可以不必须 Zookeeper 集群,一个 Zookeeper 实例即可。Zookeeper单实例安装很简单,下载 tar.gz 解压缩,进入 conf 目录,将 zoo_simple.cfg 更名为 zoo.cfg ,进入 bin 目录 通过 sh zkServer.sh start 即可启动。是否启动成功,可通过 sh zkServer.sh status 查看状态

  本文 Zookeeper 安装在 Linux 环境,IP 为 192.168.204.201(虚拟机环境),版本:3.4.14。如果你还不了解虚拟机的安装,请跳转链接:VMware虚拟机安装及如何正确联网 了解

2.在服务提供方操作

  模块名称定义为:cloud-provider-payment8004,来充当服务提供者的角色。

2.1 pom.xml 引入依赖

  引入 spring-cloud-starter-zookeeper-discovery 依赖。此处切记要查看 spring cloud 整合 zookeeper 依赖包中自带的 zookeeper 版本,如果与我们安装的 zookeeper 客户端版本有冲突,则需要我们手动排除掉(exclusion)

<!--父pom.xml就是一些基础依赖,请下载工程代码查看-->
<!--引入spring cloud zookeeper 依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    <!--排除自带的zk3.5.3-->
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--添加zk 3.4.14版本-->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.14</version>
</dependency>

 
  
  
2.2 application.yml 配置文件修改
#8004 表示注册到 zookeeper 服务器的端口号
server:
  port: 8004
#服务别名---注册zookeeper到注册中心的名称
spring:
  application:
    name: cloud-provider-payment
  cloud:
    zookeeper:
      # zk地址,此处是集群的话,使用逗号隔开
      connect-string: 192.168.204.201:2181

 
  
  
2.3 编写controller
@RestController
@Slf4j
public class PaymentController {
    
    
    @Value("${server.port}")
    private String serverPort;
    @GetMapping(value = "/payment/zk")
    public String paymentzk() {
    
    
        return "springcloud with zookeeper:" + serverPort + "\t" + UUID.randomUUID().toString();
  }
}

 
  
  
2.4 项目启动

  启动时,如果报如下错误的话,看了一下是关于 logback 日志包的错误,所以此处也就简单将 spring boot 默认使用的 logback 包排除,换成了 log4j。(spring boot 默认集成 logback,性能比 log4j 好点)

  我在此处就直接排除掉了 logback,换成了 log4j。如果你需要使用 logback,那么就看看这块怎么解决。到此为止,服务启动模块启动OK。pom.xml 配置如下所示:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 使用log4j2 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

 
  
  
2.5 查看 zk 服务是否注册成功

  通过.zkCli.sh的方式进入 zk 客户端,通过命令 ls /可以看到有个 services 文件夹,进入文件夹便能够看到我们 服务提供模块的应用名。服务提供模块,注册 zk 成功。
在这里插入图片描述

3.在服务消费者操作

  模块名称定义为:cloud-consumerzk-order80,来充当服务消费者的角色。

3.1 pom.xml 引入依赖

  同 服务提供模块 一样。需要排除 zk 版本问题都排除掉,同样参照 2.4 中,将 logback 也排除掉。

3.2 application.yml 配置文件修改
server:
  port: 80
spring:
  application:
    name: cloud-consumer-order
  cloud:
    zookeeper:
      connect-string: 192.168.204.201:2181

 
  
  
3.3 同样使用 RestTemplate 进行服务调用
@Configuration
public class ApplicationContextConfig {
    
    
    @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate(){
    
    
        return new RestTemplate();
    }
}

 
  
  

在这里插入图片描述

3.4 编写controller
@RestController
@Slf4j
public class OrderZKController {
    
    
	//使用服务名的方式调用
    public static final String INVOME_URL = "http://cloud-provider-payment";
    @Resource
    private RestTemplate restTemplate;
    @GetMapping("/consumer/payment/zk")
    public String payment (){
    
    
        String result = restTemplate.getForObject(INVOME_URL+"/payment/zk",String.class);
        return result;
    }
}

 
  
  
3.4 查看 zk 服务是否注册成功

在这里插入图片描述

3.5 接口调用测试

在这里插入图片描述

本文代码下载地址:SpringCloud 整合 Zookeeper 实现服务注册中心 (提取码:tqns)
 
下一篇:SpringCloud 整合 Consul 实现服务注册中心

猜你喜欢

转载自blog.csdn.net/m0_37989980/article/details/108460811