Consul

article/2025/9/20 15:12:09

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key/Value 存储(配置中心)、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等),使用起来也较为简单。

  Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、Windows 和 Mac OS);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。

 

主要的功能是注册中心和配置中心;

consul下载

f1c0e454965a8cf91dd0925eb4f1ca6a.png

下载完成后解压

8481d914d4783932c9f5eca934afede1.png

在路径上输入cmd,打开 命令提示符 输入 consul.exe agent -dev;启动consul

c40beb1df2a23278478907d86454d4d0.png

 启动成功后,访问路径:http://127.0.0.1:8500

dcc1f54cb71e0dd2c33c871d9acf9fca.png

Services(服务中心):向conusl中注册的服务都会显示在这上面;

Key/Value(配置中心):存放服务配置文件;

缺点:通过 consul.exe agent -dev 启动的服务,当关闭命令提示符,consul就会被关闭,而且服务中心和配置中心都会被清除,这样就无法永久保留;

持久化

其实就是把consul 注册成一个服务在后台运行;

在consul.exe 目录下创建一个 XX.bat文件

96f0b905af386bfc99be7de2aacf4364.png

在consul_start.bat 文件中输入以下命令,然后运行

@echo.service startup......  
@echo off  
@sc create Consul binpath= "E:\java\consul\consul.exe agent -server -ui -bind=127.0.0.1 -client=127.0.0.1 -bootstrap-expect  1  -data-dir E:\java\consul\data"
@net start Consul
@sc config Consul start= AUTO  
@echo.Consul starting success! 
@pause

说明

sc create :创建windows服务的命令
Consul :是我们的服务名
binPath:程序的一些路径和别的配置-client:改成自己的ip-data-dir:数据持久化的数据存放在哪

运行以后,就可以看到consul被注册到服务中,这样就可以保证consul一直在后台运行了;

a9c820f433ff2fed6ef632b2c4ee2dcc.png

SpringBoot 集成 consul

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

启动类上添加 @EnableDiscoveryClient

主要作用就是能被服务中心发现并且注册

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

配置,consul的配置信息一般写在 bootstrap.properties 文件中

b16418f6e0c540e2b8b15d3c04c313f4.png

application.properties

server.port=8090
server.address=127.0.0.1

bootstrap.properties

spring.application.name=text# consul 服务地址
spring.cloud.consul.host=127.0.0.1
# consul 服务端口
spring.cloud.consul.port=8500# 服务 ip
spring.cloud.consul.discovery.hostname=192.168.96.138
# 实例名称
spring.cloud.consul.discovery.service-name=${spring.application.name}
# 是否使用ip地址注册(开启后可以在web界面看到实例ip)
spring.cloud.consul.discovery.prefer-ip-address=true
# 注册的实例id  必须唯一
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
# 健康检测 API
spring.cloud.consul.discovery.health-check-path=/actuator/health
# 健康检测间隔时间
spring.cloud.consul.discovery.health-check-interval=10s
# 使用心跳检查push机制定期向consul server汇报自身存活情况,逾期没有汇报则server认为异常
spring.cloud.consul.discovery.heartbeat.enabled=true

实例ID:必须是唯一,一般以 服务名称-服务ip-服务端口 做为ID 注册;除了在配置文件中 配置实例ID外,我们还可以通过代码的形式实现自定义配置;

@Configuration
public class ImccConsulServiceRegistry extends ConsulServiceRegistry {private final Logger logger = LoggerFactory.getLogger(ImccConsulServiceRegistry.class);private ConsulDiscoveryProperties properties;private ConsulClient consulClient;public ImccConsulServiceRegistry(ConsulClient client, ConsulDiscoveryProperties properties, @Autowired(required = false) TtlScheduler ttlScheduler, HeartbeatProperties heartbeatProperties) {super(client, properties, ttlScheduler, heartbeatProperties);this.properties = properties;this.consulClient = client;}@SneakyThrows@Overridepublic void register(ConsulRegistration reg) {//获取服务器的ipString address = Inet4Address.getLocalHost().getHostAddress();NewService newService = reg.getService();newService.setAddress(address);newService.setId(reg.getService().getName() + "-" + address.replace(".", "-") + "-" + reg.getService().getPort());logger.info("consul注册服务,NewService:{}", newService.toString());super.register(reg);}}

注册成功

a8b81fff95c54317931fc423988cea92.png 配置中心

在bootstrap.properties 文件中 加入配置中心信息


#  开启配置中心
spring.cloud.consul.config.enabled=true 
#环境分隔符,默认值 ",例如config/application,dev/data修改后是config/application-dev/data
spring.cloud.consul.config.profile-separator=-
# 配置文件的文件格式
spring.cloud.consul.config.format=properties
# 设置应用的文件夹名称
spring.cloud.consul.config.default-context=${spring.application.name}
# 配置文件的存储的根路径,默认为config
spring.cloud.consul.config.prefix=config
# 配置文件存储key的值,或者理解为文件的名称,默认为data
spring.cloud.consul.config.data-key=data
# 启用配置自动刷新
spring.cloud.consul.config.watch.enabled=true
# 刷新延迟时间,单位:秒
spring.cloud.consul.config.watch.wait-time=1
# 刷新频率,单位:毫秒
spring.cloud.consul.config.watch.delay=10000

consul 配置

88f9253715894286fbaf8f10ee3ce1ef.png

 测试

@RestController
@RequestMapping("/text")
public class TextController {@Value("${value}")private String value;@GetMapping("/skyWalking")public String skyWalking(){return value;}
}

642e701eac5eb1cbeb123aa68aba6218.png

 

 


http://chatgpt.dhexx.cn/article/1JZw7Jf6.shtml

相关文章

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…

jQuery 创建元素、添加元素、删除元素 【一篇文章轻松拿下】

&#x1f451; 原生 JS 中&#xff0c;我们学习了一整套元素创建添加删除的操作&#xff0c;其中创建元素&#xff0c;我们用了 creatElement&#xff0c;添加元素有两种&#xff0c;分别是后面追加 apprndChild&#xff0c;和指定元素前插入 insertBefore&#xff0c;在 jQuer…

jQuery-删除元素

删除元素有两种方法 remove()&#xff1a;删除被选元素&#xff08;及其子元素&#xff09; empty()&#xff1a;从被选元素中删除子元素 remove&#xff08;&#xff09;代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><met…

“浅”谈容灾和双活数据中心(下)

本文接续前文&#xff1a;“浅”谈容灾和双活数据中心&#xff08;上&#xff09;&#xff0c;上 篇发布之后&#xff0c;瓜哥粉丝量暴涨了好几百&#xff0c;感谢大家关注&#xff01; 第三部分&#xff1a;双活&#xff0c;看上去很美。 3.1 装逼是要付出代价的 看…

存储数据保护技术——双活

目录 基本概念&#xff1a; 双活部署方式&#xff1a; 当数据中心A和数据中心B同时写入数据&#xff0c;怎么区分&#xff1f;怎样保证数据一致性&#xff1a; 分布式锁互斥&#xff1a;来保证数据的一致性 互斥&#xff1a; 分布式锁&#xff1a; 注意&#xff1a; 仲裁…

【精华】 数据中心双活该如何构建

ICT架构师技术交流(微信号ICT_Architect) 介绍分析和交流ICT行业最前沿技术&#xff0c;分享云计算、存储、服务器、数据中心、网络、软件定义和虚拟化等相关知识&#xff0c;旨在知识交流、开放共享和共同进步。 因为最近经常看到大家在讨论数据中心双活解决方案&#xff0c;…

双活数据中心概念及优缺点介绍

主备数据中心之间一般有热备、冷备、双活三种备份方式。 热备 热备的情况下&#xff0c;只有主数据中心承担用户的业务&#xff0c;此时备数据中心对主数据中心进行实时的备份&#xff0c;当主数据中心挂掉以后&#xff0c;备数据中心可以自动接管主数据中心的业务&#xff0c;…

阿里超大数据中心“异地双活”实践

灾备系统和应急管理体系建设是数据中心永不变更的热点话题。从“两地三中心”、“同城双活”到“异地双活”&#xff0c;业内的讨论层出不穷。即使在容灾备份领域较早入手的金融行业&#xff0c;在灾备切换时也是谨慎再谨慎的&#xff0c;在历年“真实切换”演练时“手软”的例…

深入剖析Vplex双活数据中心存储方案

EMC上一代存储双活方案是通过vPlex网关产品实现&#xff0c;具备异构其他厂商存储的能力&#xff0c;将各厂商存储虚拟化为统一的存储池&#xff0c;为上层服务器提供存储资源。从2010年vPlex发布以来其的硬件已经更新了VS1、VS2和VS6三代。2016年推出的VS6硬件引擎间通过40Gb …

04|同城双活:如何实现机房之间的数据同步?

04&#xff5c;同城双活&#xff1a;如何实现机房之间的数据同步&#xff1f; 你好&#xff0c;我是徐长龙。今天我们来看看用户中心改造的另一个阶段&#xff1a;构建多机房。 在业务初期&#xff0c;考虑到投入成本&#xff0c;很多公司通常只用一个机房提供服务。但随着业…