风在路上 风在路上
首页
导航站
  • Java-Se

    • Java基础
  • Java-Se进阶-多线程

    • 多线程
  • Java-Se进阶-java8新特性

    • java8新特性
  • Java-ee

    • JavaWeb
  • Java虚拟机

    • JVM
  • golang基础

    • golang基础
  • golang框架

    • gin
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • ORM

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • SpringMVC

    • SpringMVC1
    • SpringMVC2
  • SpringCloud

    • SpringCloud
  • 中间件

    • RabbitMQ
    • Dubbo
  • 秒杀项目
  • Git
  • Linux
  • Docker
  • JWT
  • 面试
  • 刷题
开发问题😈
设计模式
关于💕
归档🕛
GitHub (opens new window)

风

摸鱼
首页
导航站
  • Java-Se

    • Java基础
  • Java-Se进阶-多线程

    • 多线程
  • Java-Se进阶-java8新特性

    • java8新特性
  • Java-ee

    • JavaWeb
  • Java虚拟机

    • JVM
  • golang基础

    • golang基础
  • golang框架

    • gin
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • ORM

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • SpringMVC

    • SpringMVC1
    • SpringMVC2
  • SpringCloud

    • SpringCloud
  • 中间件

    • RabbitMQ
    • Dubbo
  • 秒杀项目
  • Git
  • Linux
  • Docker
  • JWT
  • 面试
  • 刷题
开发问题😈
设计模式
关于💕
归档🕛
GitHub (opens new window)
  • mybatis

  • mybatis-plus

  • Spring

  • SpringMvc

  • RabbitMQ

  • Dubbo

  • SpringCloud

    • SpringCloud知识体系
    • Eureka
    • ZookeeperAndConsul
      • Zookeeper
        • provider注册
        • 新建payment8004模块
        • 增加依赖
        • 修改yaml
        • 增加验证接口
        • 验证
        • 临时or持久节点
        • consumer注册
        • 验证
        • 集群zookeeper配置
      • Consul
        • Consul能干嘛
        • 中文文档
        • 下载安装
        • 启动
        • provider注册
        • pom
        • yaml
        • consumer注册
      • 三个注册中心的异同点
        • CAP
        • AP
        • CP
    • Ribbn
    • OpenFeign
    • Hystrix
    • Gateway
    • Config
    • Bus
    • Stream
    • Sleuth
    • Nacos
    • Sentinel
    • Seata
  • 框架
  • SpringCloud
zdk
2022-10-25
目录

ZookeeperAndConsul


Table of Contents generated with DocToc (opens new window)

  • Zookeeper
    • provider注册
      • 新建payment8004模块
      • 增加依赖
      • 修改yaml
      • 增加验证接口
      • 验证
      • 临时or持久节点
    • consumer注册
      • 验证
    • 集群zookeeper配置
  • Consul
    • Consul能干嘛
    • 中文文档
    • 下载安装
    • 启动
    • provider注册
      • pom
      • yaml
    • consumer注册
  • 三个注册中心的异同点
    • CAP
    • AP
    • CP

# Zookeeper

首先,使用zookeeper作为注册中心,肯定需要启动zookeeper的server,这里使用的zookeeper版本是3.5.10,springcloud的版本是2020.0.5

zookeeper下载地址:https://cloud.zaiolos.top/s/oRF7

  • 下载好后直接通过zkServer.cmd(我在win上)启动即可

# provider注册

# 新建payment8004模块

  • 和其他payment步骤一致,端口号修改即可

# 增加依赖

<!-- zookeeper添加的依赖(zk的版本是3.5.10) -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
1
2
3
4
5

# 修改yaml

server:
  port: 8004
spring:
  application:
    name: cloud-payment-service
  cloud:
    zookeeper:
      connect-string: localhost:2181
1
2
3
4
5
6
7
8

# 增加验证接口

@Slf4j
@RestController
@RequestMapping("/payment")
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/zk")
    public String paymentZk(){
        return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 验证

启动项目,再启动zkCli.cmd,执行ls /命令后,可以看到新增了services节点,进入services节点即可发现注册进去的payment服务

image-20221025163747781

进入cloud-payment-service节点中我们发现有一串无规律编码的节点,这个节点就是我们真正注册进的服务所表示的节点(名为cloud-payment-service的服务,代表了其可以为多个),

使用get命令,可以获得此节点的JSON串信息,其中就有ip port等等

get /services/cloud-payment-service/0af6e3c5-57d4-4e52-97b9-b58c9fe719aa

image-20221025164227296

# 临时or持久节点

注册进去的服务节点在zookeeper中是临时节点还是持久节点?

在关闭payment服务以后,zookeeper收不到心跳,是会将注册的服务节点进行移除的,所以是临时节点

image-20221025164927675

# consumer注册

基本步骤和provider注册一致,yaml和pom都一样,启动后可在zCli中看到对应的consumer服务及其节点信息

image-20221025170707982

# 验证

@Slf4j
@RestController
public class OrderZkController {

//    public static final String PAYMENT_URL = "http://localhost:8001";
    /**
     * 调用地址改为微服务的名称(yaml中的application.name,这样调用时就会去eureka中获取提供者)
     */
    public static final String PAYMENT_URL = "http://cloud-payment-service";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/zk")
    public String create(Payment payment){
        return restTemplate.getForObject(PAYMENT_URL+"/payment/zk", String.class);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

image-20221025171443547

# 集群zookeeper配置

在yaml中

zookeeper: connect-string: localhost:2181,xxx:xxx,xxx:xxx 这样即可

# Consul

简介

Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发


提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案


它具有很多优点。包括:基于raft协议,比较简洁;支持健康检查,同时支持HTTP和DNS协议;支持跨数据中心的WAN集群;提供图形界面;跨平台,支持Linux、Mac、Windows

# Consul能干嘛

  • 服务发现:提供HTTP和DNS两种发现方式
  • 健康检测:支持多种方式,HTTP、TCP、Docker、Shell脚本定制化
  • KV存储:提供Key、Value键值对的存储方式
  • 多数据中心:Consul支持多数据中心
  • 可视化Web界面

# 中文文档

https://www.springcloud.cc/spring-cloud-consul.html

# 下载安装

官网下载即可 https://www.consul.io/ win版本就是一个exe文件

# 启动

consul --version  #查看版本
consul agent -dev #以开发模式启动
# 启动后访问 http://localhost:8500
1
2
3

控制面板:

image-20221025175445760

# provider注册

# pom

<!-- consul依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
1
2
3
4
5

# yaml

### consul服务端口号
server:
  port: 8006

spring:
  application:
    name: consul-provider-payment-service
  ##consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
#        hostname: 127.0.0.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

然后添加主启动类,编写测试controller

@Slf4j
@RestController
public class ConsulPaymentController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping("payment/consul")
    public String paymentZk(){
        return "springcloud with consul: "+serverPort+"\t"+ UUID.randomUUID().toString();
    }
}
1
2
3
4
5
6
7
8
9
10
11

启动服务可以发现consul控制台已显示成功

image-20221025181217633

# consumer注册

步骤基本一致,不赘述

直接测试

@Slf4j
@RestController
public class OrderConsulController {

//    public static final String PAYMENT_URL = "http://localhost:8001";
    /**
     * 调用地址改为微服务的名称(yaml中的application.name,这样调用时就会去eureka中获取提供者)
     */
    public static final String PAYMENT_URL = "http://consul-provider-payment-service";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/consul")
    public String create(){
        return restTemplate.getForObject(PAYMENT_URL+"/payment/consul", String.class);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

image-20221025181923146

# 三个注册中心的异同点

组件名 语言 CAP 服务健康检查 对外暴露接口 Spring Cloud集成
Eureka Java AP 可配支持 HTTP 已集成
Consul Go CP 支持 HTTP/DNS 已集成
Zookeeper Java CP 支持 客户端 已集成

image-20221025182417815

# CAP

  • C:Consistency(强一致性)
  • A:Availability(高可用性)
  • P:Partition tolerance(分区容错性)

CAP理论关注丽都是数据,而不是整体系统设计的策略

最多只能同时较好的满足两个

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求

因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:

CA:单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。 CP:满足一致性,分区容错性的系统,通常性能不是特别高。 AP:满足可用性,分区容错性的系统,通常可能对一致性要求低一些。

# AP

AP架构,当网络分区出现后,为了保证可用性,系统B可以返回久值,保证系统的可用性

结论:违背了一致性C的要求,只满足可用性和分区容错,即AP

image-20221025183157107

# CP

CP架构 当网络分区出现后,为了保证一致性,就必须拒绝请求,否则无法保证一致性

结论:违背了可用性A的要求,只满足一致性和分区容错,即CP

image-20221025183440958

在 GitHub 上编辑此页 (opens new window)
#Zookeeper#Consul
最后更新: 2022/11/15, 19:11:00
Eureka
Ribbn

← Eureka Ribbn→

Theme by Vdoing | Copyright © 2022-2025 zdk | notes
湘ICP备2022001117号-1
川公网安备 51142102511562号
本网站由 提供CDN加速/云存储服务
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式