尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
SpringCloud---Consul
(一).Consul介绍Consul是一个服务注册/服务发现的组件和EurekaNacos类似。Consul时HashiCorp开发的一款开源的组件主要用于服务发现配置管理和分布式系统的健康检查。服务注册/发现服务在启动的时候向Consul注册并在需要时向Consul查询其他服务的地址和状态。健康检查Consul提供了健康检查机制确保只有健康的实例对外提供服务防止服务转发到故障的服务。配置管理Consul提供了一个Key/Value存储系统用于存储配置数据和其他需要共享的信息。服务分段Consul支持服务分段允许创建隔离的环境例如开发测试生产等环境(二).Consul安装1.下载Consul安装 | 领事 | HashiCorp 开发者 --- Install | Consul | HashiCorp Developer通过上面的地址下载相应的安装包2.安装Consul这是我下载完成并配置完“环境变量”之后通过cmd查看的Consul版本然后通过“consul agent -dev”命令就可以启动Consul然后通过Consul by HashiCorp链接就要可以访问到到Consul界面了如果想要在linux系统上安装wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP (?UBUNTU_CODENAME).* /etc/os-release || lsb_release -cs) main | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update sudo apt install consul直接将上面的三条命令分别粘贴到ubuntu上即可可以看到已经安装好了通过上面的命令启动consul可以看到也是可以启动成功的(三).服务注册/服务发现Consul提供了服务注册和发现的功能下面的演示还是以订单服务和商品服务的代码为例1.添加依赖!-- 添加Consul依赖 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-consul-discovery/artifactId /dependency !-- 添加健康检查依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency这里添加健康检查的依赖是因为,Consul支持健康检查,来确保只有健康的服务实例才可以被发现,Consul使用了actuator提供服务的健康检查,所以还需要引入actuator的依赖2.添加配置cloud: consul: host: localhost port: 8500 discovery: service-name: product-service在配置文件中添加相应的信息这里我们使用的是本机的consul当然也可以使用服务器的consul都可以。3.添加注解在启动类上添加EnableDiscoveryClient注解4.启动服务启动product-service服务观察consul页面可以看到product-service服务已经注册成功了当我将健康检查的依赖注释掉后重新刷新页面可以发现是没有进行健康检查的(四).服务配置和刷新Consul除了服务注册和发现之外还可以作为配置中心。服务的配置信息存储在Consul中然后服务从Consul中获取配置信息Consul在特殊的“bootstrap”阶段配置信息会被加载到Spring环境中默认情况下存储在/config文件夹中然后根据应用程序的名称和激活的配置文件创建多个PropertySource实例。当前配置在应用程序启动时读取向/refresh发送HTTP POST 请求将导致配置重新加载Config Watch 也会自动检测变化并重新加载应用程序的上下文1.初始化配置(1).创建目录使用Consul作为配置中心首先我们要先创建目录把配置信息存储到Consul中(2).创建应用目录进入config文件夹然后点击create按钮创建 product-service/应用目录存储对应微服务应用的default环境配置信息。如果项目中有多个环境例如defaultdevprod那么就在config目录下创建对应的多环境目录config/product-service对应使用config前缀的名称为product-service的应用config/product-service,dev对应使用config前缀的名称为product-service并且profile属性设置为dev的应用config/product-service,prod对应使用config前缀的名称为product-service并且profile属性设置为prod的应用(3).添加配置信息在product-serviceproduct-service,devproduct-service,prod中创建相应的文件并添加相应的配置信息注意设置的时候Key的默认名称为“data”如果不想用data会在下面具体介绍2.项目配置这里要做的主要就是添加依赖这里除了要添加consul-config的依赖之外还需要添加bootstrap的依赖。因为Spring Cloud 会创建一个Bootstrap Context作为Spring应用“Application Context”的父上下文。在Spring应用启动的初始化阶段Bootstrap Context负责从外部源(例如Consul)加载配置属性并解析配置。dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-consul-config/artifactId /dependency dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-bootstrap/artifactId /dependency3.配置文件Bootstrap属性具有高优先级即 bootstrap.yml的优先级要高于application.yml。所以我们需要创建bootstrap.yml并且添加相应的配置信息spring: application: name: product-service profiles: active: dev cloud: consul: host: 127.0.0.1 port: 8500 config: format: YAMLSpring 在启动的时候在bootstrap结尾段会通过Consul去获取 key 为“config/product-service,dev/data”对应的valuevalue的格式为yaml4.测试package org.com.spring.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; RequestMapping(/consul) RestController public class ConsulController { Value(${service-name}) private String serviceName; Value(${output.info}) private String outputInfo; RequestMapping(/getMsg) public String getMsg(){ return String.format(从配置文件中获取数据 serviceName : %s , outputInfo : %s,serviceName,outputInfo); } }可以看到拿到的东西信息是一样的图中的关系都是要对应起来的5.动态刷新Consul也是支持动态刷新配置的我们只需要在配置类上加上 RefreshScope注解可以标记需要动态刷新的Bean。当接收到刷新事件时这些Bean会重新加载最新的配置可以看得到是可以获取到修改之后的数据的注意默认的检查频率是1000单位毫秒当然我们也可以自己设定6.其他配置默认的情况下consul配置的路径前缀是 /config不同的application和profile对应不同的配置路径。例如 product-service 和 dev 的配置consul在扫描的时候会涉及到以下路径config/product-serivce,dev/config/product-service/config/application,devconfig/application这个列表从上往下分别对应的配置优先级从高到低优先级高的同样配置项会覆盖优先级低的配置项。对于 config/application 是全局公共配置对应使用config前缀的所有应用对于 config/product-serivce,dev/ 是全局dev公共配置对应使用config前缀的所有且profile为dev的应用下面开始具体的测试然后重启服务开始测试在日志中也可以看到可以发现优先级最高的是product-service-dev然后我将product-service-dev删除了然后访问到的就是product-service-default剩下的以此类推同样当我将product-service中的配置添加到order-service中的时候再运行可以发现也是可以访问成功的这里我们要注意一点前面介绍的动态刷新只针对修改配置文件不针对新增或者删除配置文件所以但我们删除配置文件之后我们要重启服务当然关于consul的配置还有很多属性这里逐一介绍spring: cloud: consul: host: 127.0.0.1 port: 8500 config: # 是否启用配置中心默认值 true 开启 enabled: true # 设置配置的基本文件夹默认值 config 可以理解为配置文件所在的最外层文件夹 prefix: config # 配置环境分隔符默认值 , 和 default‑context 配置项搭配 # 例如应用 product‑service 分别有环境 default, dev, prod # 需在 config 文件夹下创建 product‑serviceproduct‑service‑dev # product‑service‑prod 文件夹即可 profile‑separator: - # 指定配置格式为 yaml format: YAML # Consul 的 Key/Values 中的 KeyValue 对应整个配置文件 data‑key: productConfig # 以上配置可以理解为加载 config/product‑service/ 文件夹下 Key 为 productConfig 的 Value 对应的配置信息 watch: # 是否开启自动刷新默认值 true 开启 enabled: true # 刷新频率单位毫秒默认值 1000 delay: 1000由于有些属性是有默认值的所以在前面没有配置例如 prefisenabled等等(五).Consul配置持久化但是现在consul有一个问题。当我将consul关闭之后然后再重启现在我重启了发现所有的配置文件都没有了。这和我们的启动命令有关我们启动的时候使用的是 consul agent -dev 启动的-dev表示的是 开发环境关闭所有持久化选项用于快速开启consul代理-server表示的是 以服务器模式启动consul代理-client表示的是 以客户端模式启动consul代理-ui表示的是 启用consul的Web用户界面-bootstrap-expect表示的是 设置期望加入的服务器节点数用于初始化集群-date-dir表示的是 指定数据存储目录所以说我们可以指定consul数据的存储目录consul agent -server -bootstrap-expect 1 -ui -data-dirE:\SpringCloudCode\consul_data -bind127.0.0.1 -advertise127.0.0.1上面的命令是我通常使用的命令大家可以自定义
RELATED

相关推荐

2026年3款降AI率软件实测对比,论文AI率过高必看

2026年3款降AI率软件实测对比,论文AI率过高必看

最近在学术圈经常听到这样的抱怨:明明是自己写的论文,AIGC检测却显示80%以上AI生成;查重率怎么也降不到学校要求的15%以下;盲审前夕熬夜改到词穷,却越改越乱。如果你也面临这样的困境,别着急,本…

📅 2026/9/11 8:04:40
工业数据采集质量管控:从传感器到传输链路的系统性排查指南

工业数据采集质量管控:从传感器到传输链路的系统性排查指南

1. 源头失真:传感器与信号链路中最容易被忽略的精度损耗做工业数据采集这几年,我最大的感受是:很多质量问题的根子根本不在软件,不在数据库,而在最不起眼的传感器和信号传输环节。车间里经常出现这种情况——两套系统读…

📅 2026/10/26 2:14:22
YOLO+LLM多模态大模型在智慧公安视频检索中的实践

YOLO+LLM多模态大模型在智慧公安视频检索中的实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/26 2:23:38
MORE NEWS

更多资讯

📰

从单体到微服务:企业级架构演进与容器化实践

1. 技术架构演进的必然性十年前我刚入行时,最常见的还是单体架构。所有功能都打包在一个WAR包里,每次发布都像在走钢丝——改个小功能就得全站重启,高峰期根本不敢上线。记得有次商城促销活动,就因为支付模块的一个小改动&#xf…

📰

MySQL二进制数据读写与Android集成实战

1. MySQL二进制数据读写实战指南 在移动应用开发中,经常需要处理图片、音频等二进制数据的存储问题。MySQL作为最流行的关系型数据库之一,提供了完善的二进制数据(BLOB)处理能力。本文将深入探讨如何通过C API实现Android平台上MySQL二进制数据的高效读写…

📰

低功耗WiFi+BLE模组接入智能家居生态:SDK移植与配网认证实战

手头这批低功耗 WiFiBLE 二合一模组要接进主流智能家居生态,从拿到生态方 SDK 到设备在 App 里亮灯,前后折腾了差不多三周。这中间踩的坑不少:配网失败、认证被拒、日志炸串口、OTA 分区算错......网上的资料大多是零散的问答帖,缺…

📰

平头哥打开底层软件栈:650家客户验证的RISC-V生态入场券

芯片公司的底层软件栈,平时是真没人提。大多数人聊芯片,聊的是主频、核数、NPU算力、功耗,再顶多说说制程工艺。可是等板子真的贴出来、系统真的跑起来,让你卡住半个月的,往往是U-Boot起不来、中断没响应、DMA地址不对…

📰

VS Code SFTP插件实现Windows与Ubuntu文件同步配置指南

1. Windows与Ubuntu文件同步完全指南:VS Code SFTP插件配置详解作为一名长期在Windows和Linux双系统环境下工作的开发者,我深刻理解跨平台文件同步的痛点。每次在Windows上修改完代码,都要手动上传到Ubuntu服务器测试,这种重复劳动…

📰

自动驾驶路径规划与行为决策技术解析

1. 自动驾驶技术现状与挑战 自动驾驶技术正在经历从实验室走向真实道路的关键转折期。根据SAE分级标准,目前主流车企和科技公司已经实现了L2级辅助驾驶的大规模商业化应用,部分头部企业开始在城市道路场景中测试L4级自动驾驶系统。这个演进过程中&#x…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬