Spring Cloud入门+深入(六)-Consul

Spring Cloud入门+深入(六)-Consul,第1张

Spring Cloud入门+深入(六)-Consul 一、Consul服务注册与发现

Consul服务注册与发现架构图:

1、Consul简介

Consul官网

What is Consul?
Consul is a service mesh solution providing a full featured control plane with service 
discovery, configuration, and segmentation functionality. Each of these features can be 
used individually as needed, or they can be used together to build a full service mesh. 
Consul requires a data plane and supports both a proxy and native integration model. Consul 
ships with a simple built-in proxy so that everything works out of the box, but also
supports 3rd party proxy integrations such as Envoy.

Review the video below to learn more about Consul from HashiCorp's co-founder Armon.

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

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

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

Consul能做什么?

  • 服务发现:Consul 的客户端可以注册一个服务,例如 api或mysql,其他客户端可以使用 Consul 来发现给定服务的提供者。使用 DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务。

  • 健康检查:Consul 客户端可以提供任意数量的健康检查,要么与给定的服务相关联(“网络服务器是否返回 200 OK”),要么与本地节点(“内存利用率低于 90%”)相关联。 *** 作员可以使用此信息来监视集群健康状况,并且服务发现组件可以使用它来将流量从不健康的主机路由出去。

  • KV 存储:应用程序可以将 Consul 的分层键/值存储用于多种目的,包括动态配置、功能标记、协调、领导选举等。简单的 HTTP API 使其易于使用。

  • 安全服务通信:Consul 可以为服务生成和分发 TLS 证书,以建立相互的 TLS 连接。 意图 可用于定义允许哪些服务进行通信。可以通过实时更改意图轻松管理服务分段,而不是使用复杂的网络拓扑和静态防火墙规则。

  • 多数据中心:Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。

 Consul怎么使用呢?

Spring Cloud Consul使用

2、Consul软件下载安装

Consul软件下载:Consul软件下载

下载Windows 64位版或Linux 64位

安装并运行Consul:官网安装说明Consul官网安装说明

Windows 64位下载完成后只有一个consul.exe文件,硬盘路径下双击运行,查看版本信息

在 consul.exe文件,路径打开cmd输入:consul --version         可查看consul版本信息

使用开发模式启动:consul agent -dev

 Consul启动成功

 本地Consul首页访问:Consul首页访问地址

成功页面显示:

3、Spring Cloud Consul实例 1、新建Module支付服务 cloud-providerconsul-payment8006

pom



    
        cloud2021
        com.lwz.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-providerconsul-payment8006

    
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
            com.lwz.springcloud
            cloud-api-commons
            ${project.version}
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

application.yml

server:
  port: 8006

spring:
  application:
    name: consul-provider-payment
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

主启动类

package com.lwz.springcloud;

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

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

controller

package com.lwz.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

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

    @GetMapping("/payment/consul")
    public String paymentConsul(){
        return "Consul port"+serverPort+"t"+ UUID.randomUUID().toString();
    }
}

启动微服务

Consul首页访问结果:

访问测试地址:

http://localhost:8006/payment/consul

结果:Consul port8006 3fba1df4-f65c-4169-bfcb-21413eeebd18

2、新建Module消费服务 cloud-consumerconsul-order80

pom



    
        cloud2021
        com.lwz.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-consumerconsul-order80

    
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
            com.lwz.springcloud
            cloud-api-commons
            ${project.version}
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

application.yml

server:
  port: 80

spring:
  application:
    name: consul-consumer-order
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

config

package com.lwz.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {

    @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}

controller

package com.lwz.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
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
@Slf4j
public class OrderConsulController {

    public static final String INVOME_URL="http://consul-provider-payment";

    @Autowired
    private RestTemplate restTemplate;

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

}

启动微服务

Consul首页访问结果:

 访问测试地址:http://localhost/consumer/payment/consul

结果:Consul port8006 a9ea8da1-8cef-4f28-845f-f115b494fdba

二、Eureka/Zookeeper/Consul三个注册中心异同点

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

        C:Consistency(强一致性)

        A:Availability(可用性)

        P:Partition tolerance(分区容错)

经典的CAP图

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

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错这三个需求,因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:

CA:单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。

CP:满足一致性,分区容忍性的系统,通常性能不是特别高。

AP:满足一致性,分区容忍性的系统,通常可能对一致性要求低一些。

Eureka/Zookeeper/Consul三个注册中心异同点?

AP(Eureka)

AP架构

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

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

CP(Zookeeper/Consul)

CP架构

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

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

Spring Cloud入门+深入(一)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5659900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存