SpringCloud整合Zookeeper替代Eureka

Apache ZooKeeper 是一个开源的分布式应用程序协调组件,是 Hadoop 和 Hbase 的重要组件。是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。在微服务项目开发中 ZooKeeper 主要的角色是当做服务注册中心存在,我们将编写好的服务注册至 ZooKeeper 即可。

2.1.下载

ZooKeeper 在 Java 中运行,版本 1.8 或更高,推荐使用java1.8,ZooKeeper 下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/,打开后如下图:

2.2. jdk安装

2.2.1.上传文件解压

[root@localhost tmp]# tar -zxvf jdk-8u172-linux-x64.tar.gz -C /opt
[root@localhost tmp]# cd /opt
[root@localhost opt]# mv jdk1.8.0_161 jdk1.8

2.2.2.检查环境,已经安装删除

[root@localhost mysoft]# ps -aux|grep java
[root@localhost mysoft]# rpm -e --nodeps rpm -qa | grep java

2.2.3.配置环境变量

[root@localhost /]# vim /etc/profile
# 文件末尾追加 下面内容 shit+g 跳到文件末尾
# JAVA_HOME
export JAVA_HOME=/opt/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin

#注意添加完成后需要执行命令配置生效
[root@localhost /]# source /etc/profile

2.2.4.检测安装成功

[root@localhost /]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

2.3.Zookeeper 安装

2.3.1.拷贝 Zookeeper 安装包到 Linux 系统下,解压到opt下的module目录

tar -zxvf zookeeper-3.4.9.tar.gz -C /opt/module/

2.3.2.配置修改

将/opt/module/zookeeper-3.4.9/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg
mv zoo_sample.cfg zoo.cfg
打开 zoo.cfg 文件,修改 dataDir 路径
vim zoo.cfg

修改如下内容为:

dataDir=/opt/module/zookeeper-3.4.9/zkData
在/opt/module/zookeeper-3.4.9/这个目录中创建 zkData 文件夹
mkdir zkData

2.3.3.操作 Zookeeper

启动 Zookeeper,在/opt/module/zookeeper-3.4.9/bin 执行如下命令:
./zkServer.sh start
查看进程是否启动
[root@localhost bin]# jps
4148 QuorumPeerMain
4667 Jps
查看状态:
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: standalone
启动客户端:
[root@localhost bin]# ./zkCli.sh
停止 Zookeeper
./zkServer.sh stop

2.4.关闭防火墙

关闭运行的防火墙服务(临时关闭)

systemctl stop firewalld.service

禁用防火墙服务

systemctl disable firewalld.service

2.5.zookeeper配置参数说明

Zookeeper中的配置文件zoo.cfg中参数含义解读如下:
1.tickTime =2000:通信心跳数,Zookeeper 服务器与客户端心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
2.initLimit =10:LF 初始通信时限
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
3.syncLimit =5:LF 同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit *tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
4.dataDir:数据文件目录+数据持久化路径
主要用于保存 Zookeeper 中的数据。
5.clientPort =2181:客户端连接端口
监听客户端连接的端口。

三、服务提供者

3.1.新建cloud-provider-payment8004

创建maven项目

 设置模块名为 cloud-provider-payment8004 

3.2.在POM中引入依赖

由于在引入spring-cloud-starter-zookeeper-discovery的时候,会自动引入zookeeper。但是是3.5.3,我们部署到centos7中的是zookeeper3.4.9,所以要求导入的依赖和配置的版本必须一直,就要解决zookeeper版本jar包冲突问题,先排除自带的版本依赖,然后再导入3.4.9我们需要的版本,冲突包如下:

<dependencies>
        <dependency>
            <groupId>com.augus.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--SpringBoot整合Zookeeper客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <exclusions>
                <!--先排除自带的zookeeper3.5.3beta-->
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--添加zookeeper3.4.9-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
            <!--排除slf4j冲突的jar包-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3.2.在application.yml添加内容

这里面的内容复制即可。主要是需要设置将服务注册到zookeeper

server:
  # 8004 表示注册到zookeeper服务器的支付服务提供者端口号
  port: 8004
spring:
  application:
    # 服务别名---注册zookeeper到注册中心的名称
    name: cloud-provider-payment
  cloud:
    zookeeper:
      # zookeeper默认的端口就是2181   192.168.93.133是部署了zookeeper的服务器ip
      connect-string: 192.168.93.133:2181

3.3.创建主启动类

在com.augus.cloud下创建主启动类,需要给添加上@EnableDiscoveryClient,注定为服务提供者

package com.augus.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8004 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8004.class, args);
    }
}

3.4.测试

先启动zookeeper,在启动8004服务,访问:http://localhost:8004/payment/zk,如下图:

四、服务消费者

这里服务消费者在80服务的基础上修改即可

4.1.修改pom文件为

<dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>com.augus.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--SpringBoot整合Zookeeper客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <exclusions>
                <!--先排除自带的zookeeper3.5.3beta-->
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--添加zookeeper3.4.9-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
            <!--排除slf4j冲突的jar包-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>

4.2.设置配置文件

application.yml文件内容修改为:

server:
  port: 80

spring:
  application:
    name: cloud-consumer-order
  cloud:
    zookeeper:
      connect-string: 192.168.93.133:2181

4.3.修改主启动类

这里主启动类要使用 @EnableDiscoveryClient 进行注册

package com.augus.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class,args);
    }
}

4.4. controller修改内容后如下:

package com.augus.springcloud.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class OrderController {//指定调用的zookeeper服务提供者的服务名
    public static final String  PAYMENT_URL = "http://cloud-provider-payment";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/zk")
    public String paymentInfo() {
        return restTemplate.getForObject(PAYMENT_URL + "/payment/zk", String.class);
    }
}

4.5.测试访问地址

访问地址 :http://localhost/consumer/payment/zk 显示如下图所示

posted @ 2022-12-29 15:40  酒剑仙*  阅读(106)  评论(0)    收藏  举报