0
点赞
收藏
分享

微信扫一扫

SpringCloud整合Zookeeper替代Eureka

一、Zookeeper 介绍

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

二、ZooKeeper 安装

2.1.下载

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

SpringCloud整合Zookeeper替代Eureka_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项目

SpringCloud整合Zookeeper替代Eureka_zookeeper_02

 设置模块名为 cloud-provider-payment8004 

SpringCloud整合Zookeeper替代Eureka_spring_03

3.2.在POM中引入依赖

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

SpringCloud整合Zookeeper替代Eureka_spring_04

<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,如下图:

SpringCloud整合Zookeeper替代Eureka_zookeeper_05

四、服务消费者

这里服务消费者在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 显示如下图所示

SpringCloud整合Zookeeper替代Eureka_spring_06



举报

相关推荐

0 条评论