Consul服务注册与发现

article/2025/9/20 14:46:35

目录

一、Consul简介

(一)官网

(二)特点

二、安装并运行Consul

(一)官网安装说明

(二)下载

(三)使用开发模式启动 

三、服务提供者

四、服务消费者

五、三个注册中心异同点

(一)CAP理论

(二)AP架构

(三)CP架构


一、Consul简介

(一)官网

What is Consul? | Consul | HashiCorp Developer

HashiCorp Consul 是一种服务网络解决方案使团队能够管理服务之间以及跨本地和多云环境和运行时的安全网络连接。Consul 提供服务发现、服务网格、流量管理和网络基础设施设备的自动更新。可以在单个 Consul 部署中单独或一起使用这些功能。

 

 (二)特点

1、服务发现     提供HTTP和DNS两种发现方式。

2、健康监测     支持多种方式,HTTP、TCP、Docker、Shell脚本定制化监控

3、KV存储        支持Key、Value的存储方式

4、多数据中心  Consul支持多数据中心

5、可视化Web界面

二、安装并运行Consul

(一)官网

Deploy Consul server | Consul | HashiCorp Developer

 也可以参照中文文档Spring Cloud Consul 中文文档 参考手册 中文版

 (二)下载

Install | Consul | HashiCorp Developer

下载完成后只有一个consul.exe文件,通过命令行窗口,查看版本号信息【consul --version】

 

(三)使用开发模式启动 

【consul agent -dev】

通过以下地址可以访问Consul的首页:http://localhost:8500

 

三、服务提供者

(一)新建Module

cloud-providerconsul-payment8006

(二)POM

    <dependencies><!--SpringCloud consul-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><!-- SpringBoot整合Web组件 --><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><!--日常通用jar包配置--><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>

(三)YML

###consul服务端口号
server:port: 8006spring:application:name: consul-provider-payment
####consul注册中心地址cloud:consul:host: localhostport: 8500discovery:#hostname: 127.0.0.1service-name: ${spring.application.name}

(四)主启动类

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

(五)业务类Controller

@RestController
public class PaymentController
{@Value("${server.port}")private String serverPort;@GetMapping("/payment/consul")public String paymentInfo(){return "springcloud with consul: "+serverPort+"\t\t"+ UUID.randomUUID().toString();}
}

(六)验证

四、服务消费者

(一)新建Module

cloud-consumerconsul-order80

(二)POM

<dependencies><!--SpringCloud consul-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><!-- SpringBoot整合Web组件 --><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><!--日常通用jar包配置--><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>

(三)YML

###consul服务端口号
server:port: 80spring:application:name: cloud-consumer-order
####consul注册中心地址cloud:consul:host: localhostport: 8500discovery:#hostname: 127.0.0.1service-name: ${spring.application.name}

(四)主启动类

@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class OrderConsulMain80
{public static void main(String[] args){SpringApplication.run(OrderConsulMain80.class,args);}
}

(五)配置Bean和业务类Controller

Bean

@Configuration
public class ApplicationContextBean
{@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}

Controller

@RestController
public class OrderConsulController
{public static final String INVOKE_URL = "http://cloud-provider-payment"; //consul-provider-payment@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/consumer/payment/consul")public String paymentInfo(){String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul", String.class);System.out.println("消费者调用支付服务(consule)--->result:" + result);return result;}
}

(六)验证

 

 

五、三个注册中心异同点

(一)CAP理论

C:Consistency(强一致性)

A:Availability(可用性)

P:Partition tolerance(分区容错性)

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

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

 

(二)AP架构


当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。
结论:违背了一致性C的要求,只满足可用性和分区容错,即AP

(三)CP架构

当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性
结论:违背了可用性A的要求,只满足一致性和分区容错,即CP 

总结:

对于springcloud三个常用注册组件,其异同点大致如下:

 

 


http://chatgpt.dhexx.cn/article/nPZVZycU.shtml

相关文章

Consul是什么

前言 Consul是一个基于CP的轻量级分布式高可用的系统&#xff0c;提供服务发现、健康检查、K-V存储、多数据中心等功能&#xff0c;不需要再依赖其他组件(Zk、Eureka、Etcd等)。 服务发现&#xff1a;Consul可以提供一个服务&#xff0c;比如api或者MySQL之类的&#xff0c;其他…

Consul的使用

Consul可以用来进行服务发现&#xff0c;我们来测试下Consul的使用 一.Consul基本使用 先需要下载Consul的程序https://www.consul.io/downloads.html 我们这里下载Windows 64版本。 下载后直接解压就行了&#xff0c;里面会有一个consul.exe文件。通过命令可以启动consul.…

Consul 使用手册(感觉比较全了)

使用consul 介绍 Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性: 服务发现 Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序…

【Consul】Consul架构-简介

Consul是一个复杂的系统&#xff0c;有许多不同的移动部件。为了帮助用户和Consul的开发人员更深入的了解consul是如何工作的&#xff0c;本文介绍consul的系统架构。 高级话题&#xff1a;本节主要讲解consul内部技术细节&#xff0c;使用consul不需要必须了解这些细节的。这…

Consul的介绍、安装与使用

1.常用服务注册与发现框架 常见服务发现框架 Consul、Eureka、 ZooKeeper以及Etcd ZooKeeper是这种类型的项目中历史最悠久的之一&#xff0c;它起源于Hadoop。它非常成熟、可靠&#xff0c;被许多大公司&#xff08;YouTube、eBay、雅虎等&#xff09;使用。其中consul并不需…

【超详细】Consul的安装的使用附多环境配置(傻瓜式教程)

一、Consul概述 Consul 是 HashiCorp 公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案&#xff0c;Consul 的方案更“一站式”&#xff0c;内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多…

Consul系列:什么是Consul?

引言 Consul 是 HashiCorp 公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案&#xff0c; consu1 的方案更“一站式”&#xff0c;内置了服务注册 与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心…

Consul安装并运行

Consul安装并运行 一、安装 官网&#xff1a;https://www.consul.io/downloads.html 下载完成后只有一个consul.exe文件&#xff0c;硬盘路径下双击运行 查看 consul 版本信息&#xff1a; consul --version 使用开发模式启动&#xff1a; consul agent -dev 二、运行 通…

Consul

Consul 是 HashiCorp 公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案&#xff0c;Consul 的方案更“一站式”&#xff0c;内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key/Value 存储&#xff08;配置中…

Consul详解

Spring Cloud 支持很多服务发现的软件&#xff0c;Eureka 只是其中之一&#xff0c;下面是 Spring Cloud 支持的服务发现软件以及特性对比&#xff1a; FeatureeuerkaConsulzookeeperetcd服务健康检查可配支持服务状态&#xff0c;内存&#xff0c;硬盘等(弱)长连接&#xff0c…

5分钟让你看懂Consul特性及搭建

一、前言 虽然说牛逼的公司都有那么几个牛逼的运维团队&#xff0c;牛逼的运维团队都有着神秘黑科技般敲代码的姿势&#xff1b;本人虽然不是一个运维工程师&#xff0c;但是有幸自己比较爱倒腾这些东西&#xff0c;也会那么一点点运维知识&#xff0c;虽然不算专业&#xff0…

consul简介

目录 Consul 简介 Consul 的使用场景 Consul 的优势 Consul 的角色 consul cluster集群架构图 Consul常用命令 consul agent 命令的常用选项 Spring Cloud Consul 项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统&#xff0c;具有分布式、高可用、高扩…

Consul 基本概念、内部原理

1.什么是Consul&#xff1f; Consul是一种服务网格解决方案&#xff0c;提供具有服务发现&#xff0c;配置和分段功能的全功能控制平面。 这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以一起使用以构建全服务网格。 Consul需要数据平面并支持代理和本机集成模型…

Consul的介绍和基本使用

一、Consul的简单介绍 Consul是一套开源的分布式服务发现和配置管理系统&#xff0c;由HasiCorp公司用go语言开发的。提供了微服务系统中服务助理、配置中心、控制总线等功能&#xff0c;这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以一起使用以构造全方位的服…

Consul 注册中心介绍以及搭建

本篇重点介绍 Consul 是什么&#xff0c;它可以解决什么问题&#xff0c;它与现有软件的比较&#xff0c;以及如何开始使用它。 目录 1、常见的注册中心2、Consul 介绍3、Consul 特性4、Consul的基本架构5、Consul单节点安装与启动6、Consul启动命令详解7、了解Consul启动输出8…

jQuery删除元素或内容

删除元素/内容 remove()&#xff1a;删除被选元素 empty()&#xff1a;删除被选元素中子元素

JQuery 数组获取和删除元素

<script>var target []; target [0] "aaa000"; target [1] "bbb111"; target [2] "ccc222"; target [3] "ddd333"; target [4] "eee444"; target [5] "fff555";console.log("使用push()添加元素…

jQuery添加元素

今天教大家来通过jQuery来很容易地添加与删除元素以及内容。我们主要学习的方法有添加的方法四个。首先我们来通过append()和prepend()方法来添加若干新元素&#xff0c;老样子&#xff0c;我们先来看效果展示&#xff1a;一个段落标签和一个button标签组成简易页面&#xff1b…

Jquery添加与移除元素

显示隐藏 siblings() addclass() 给元素添加class&#xff0c;如果元素上已经有其他的classname&#xff0c;那么新的会追加到现有classname后面 用法&#xff1a;$("li").addClass("bigger") removerClass() removerClass():可以将元素的某个class移…

jquery的DOM节点操作(删除元素节点)

1.删除元素节点 在操作页面时&#xff0c;删除多余或者指定的页面元素是非常必要的。 jquery中提供了remove&#xff08;&#xff09;方法来删除元素。 其语法格式如下&#xff1a; 删除元素节点示例代码&#xff1a; <!DOCTYPE html> <html><head><met…