【Spring Cloud】微服务工程中的服务注册与发现配置中心-Consul

Catalog

  • Spring Cloud Consul
    • 一、需求
    • 二、是什么
    • 三、优点
    • 四、缺点
    • 五、怎么用
    • 六、细节

Spring Cloud Consul

一、需求

多个微服务之间通过RestTemplate中的api相互调用,一般要写死微服务的IP地址和端口号,相当于硬编码,非常不灵活,而且对于某中微服务可能会做负载均衡,这样通过编码的方式写IP地址和端口号,对于一个微服务需要去调用另外一个微服务的时候就非常繁琐和麻烦,Consul就帮我们解决了这个问题,项目中的每一个微服务都在Consul进行注册(入驻),微服务之间调用的时候,就通过Consul来需要需要调用的微服务。

除此之外,当一个项目是由多个微服务组成的时候,往往会存在很多通用的配置,比如多个微服务可能使用的都是同一个数据库的IP地址和端口号,如果在每一个微服务都单独配置这些通用的配置,当数据库的IP或者端口改变的时候,就需要去到每一个微服务单独修改配置文件,当微服务的数量非常多的时候,修改这些配置文件就非常耗时,且意义不大,本着有问题就加一层的原则,我们可以将这些通用的配置信息抽取出来统一管理(全局配置信息),当全局配置信息发生改变的时候,就通知到每一个微服务进行修改,而Consul就可以帮我们做这件事情。

二、是什么

Consul属于第三方软件(类似tomcat),是独立于微服务项目之外的(较于Eureka的优势所在之一),可以为我们提供服务注册与发现、代理配置中心等等功能,满足CP(CAP理论),即保证数据一致性和分区容错性,但不保证高可用。(Consul官网、Spring官网)

tips:CAP理论

CAP理论,即下面三个词组的首字母Consistency、 Availability 、 Partition tolerance, 任何分布式系统理论上只能满足其中任意两个特性。

  • C:代表数据的强一致性,其实也就是多个节点之间同步数据的时候,如果某个节点同步数据失败,会直接拒绝后续的请求;
  • A:代表高可用性,是相对于用户来说,也就是这个分布式系统什么时候都能做出非错误响应(数据可能是过期的);
  • P:代表分区容错性,在分布式系统中,有多个节点,比如有三个节点A、B、C,A和B之间出现网络故障无法通信,但A和C、B和C仍然可以通信,相当于形成了两个分区,只有分区内的节点能够相互通信,这就是网络分区故障,而分区容忍性代表着系统即使发生网络分区,也可以继续运行。

三、优点

  1. 实现了和多微服务项目的解耦(早期的Eureka是耦合在项目中的);
  2. 阳哥笔记:
    Alt

四、缺点

  1. 需要额外维护第三方服务器(Consul服务器)

五、怎么用

下载Consul服务

  1. 官网下载
    Alt

  2. 安装好后,点击Exe文件,可能会一闪而过,但不影响使用
    Alt

  3. 在D:\Final-plan\SpringCloud\dev-soft\consul_1.17.1_windows_386目录下(输入cmd,进入命令提示符界面),输入"consul agent -dev"以开发模式启动:
    Alt

微服务的注册与发现

  1. 导入Maven坐标;

    		<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency>
    
  2. 修改微服务配置文件,主要配置微服务在Consul的名字,然后启动项目;

    spring:application:name: cloud-payment-service# 配置spring cloud consul for discovery servicecloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}
    
  3. 打开Consul的图形化界面(本机),查看是否有该微服务;

    Alt

  4. 基于Consul,通过RestTemplate实现微服务之间的调用,将原来被调用的微服务的IP地址和端口一并删掉,换成在Consul中配置的名字;

      //public static final String PaymentSrv_URL = "http://localhost:8001/pay";public static final String PaymentSrv_URL = "http://cloud-payment-service"; //IP地址和端口号修改为在Consul配置的名字,这里是在微服务中的调用方配置的需要调用的微服务地址
    

微服务从Consul拉取配置信息

  1. 导入Maven坐标;

     <!--SpringCloud consul config--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>
    
  2. 建立bootstrap.yml文件(resource目录下),该文件是比application.yml优先级更高的配置文件,会在项目初始化化的时候拉去外部源(这里指的是在Consul中的配置信息)的配置信息;

    spring:application:name: cloud-payment-service####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}config:profile-separator: '-' # default value is ",",we update '-',这里配置的是Consul的文件夹命名的分隔符,主要是要识别最后一个分隔符后面的单词作为环境标识符format: YAML # 规定Spring Cloud程序用什么解析器解析从consul拉取过来的数据watch:wait-time: 1 # 当Consul配置信息发生改变的时候,通知微服务来拉取# config/cloud-payment-service/data
    #       /cloud-payment-service-dev/data
    #       /cloud-payment-service-prod/data
    
  3. 在Consul中配置全局配置中心的信息,注意要创建文件夹输入的名字的结尾要加’/', 第一个目录需要指定为config,最后的数据的名字需要指定为data
    Alt

    Alt

    Alt

    Alt

  4. 在application.yml文件中配置使用哪个环境的配置文件(对应到在Consul配置的配置信息文件夹中,最后一个分隔符的名字);
    Alt

    spring:profiles:active: dev# 多环境配置加载内容dev/prod,不写就是默认default配置
    
  5. 测试从Consul拉取配置信息是否成功,在Controller层测试;

     @Value("${server.port}")private String port;@GetMapping("/get/info")public String getInfoByConsul(@Value("${test.info}") String info){return "test.info: " + info + " " + port;}
    

    Alt

六、细节

  1. 重启Consul服务器之后,上面设置的全局配置中心就全部清空了,后续需要对这些配置做持久化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/19275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis出现:SQLSyntaxErrorException: Unknown column ‘XXX‘ in ‘field list‘

<update id"updateStudent">update tb_students set stu_name${stuName},stu_gender${stuGender},stu_age${stuAge},stu_tel${stuTel}where stu_num ${stuNum}</update> 本质上来说&#xff0c;是Mybatis使用上的错误&#xff0c;不熟悉&#xff0c;理…

SQL函数--union all 使用方法及案例

1. 使用方法 在 SQL 中&#xff0c;UNION ALL 操作用于结合两个或更多 SELECT 语句的结果集&#xff0c;包括所有匹配的行&#xff0c;甚至包括重复的行。这与 UNION 不同&#xff0c;因为 UNION 会自动删除重复的行。 满足条件&#xff1a; 1、两个select查询的列的数量必须相…

Ai速递5.29

全球AI新闻速递 1.摩尔线程与无问芯穹合作&#xff0c;实现国产 GPU 端到端 AI 大模型实训。 2.宝马工厂&#xff1a;机器狗上岗&#xff0c;可“嗅探”故障隐患。 3.ChatGPT&#xff1a;macOS 开始公测。 4.Stability AI&#xff1a;推出Stable Assistant&#xff0c;可用S…

企业网络的“瑞士军刀”:探索“一端多能”设备的多面性

在数字化时代&#xff0c;企业网络需求的复杂性和多样性不断增长&#xff0c;传统的单一功能网络设备已难以满足这些需求。企业需要一种集多种功能于一身的“一端多能”网络设备&#xff0c;以应对各种网络环境和业务需求&#xff0c;就像是一把多功能、灵活、可靠的瑞士军刀&a…

一个月速刷leetcodeHOT100 day13 二叉树结构 以及相关简单题

树是一种分层数据的抽象模型 二叉树 二叉树中的节点最多只能有两个子节点&#xff0c;一个是左侧子节点&#xff0c;另一个是右侧子节点 二叉搜索树 二叉搜索树&#xff08;BST&#xff09;是二叉树的一种&#xff0c;但是只允许你在左侧节点存储&#xff08;比父节点&…

测试基础07:测试工作流程规范、进度同步与把控

课程大纲 1、迭代测试流程 2、测试流程 2.1、测试用例评审 目的&#xff1a;对齐产品需求理解&#xff0c;完善、优化测试场景。 参与方&#xff1a;项目、产品、开发、测试。 用例内容&#xff1a;冒烟用例&#xff08;主流程&#xff09; 功能用例。 2.2、冒烟测试 提测…

SOLIDWORKS正版价格多少钱

SOLIDWORKS作为目前应用较为广泛的3D CAD软件之一&#xff0c;具有强大的功能和实用性&#xff0c;它为各类工程设计提供综合解决方案。但是&#xff0c;正版SOLIDWORKS价格是个不可忽视的问题。那SOLIDWORKS的正版价格究竟如何呢&#xff1f;又是受什么因素影响&#xff1f; 先…

【论文阅读|cryoET】ICE-TIDE

简介 三维cryoET重建的保真度进一步受到采集过程中物理扰动的影响。这些扰动以各种形式表现出来&#xff0c;例如连续采集之间的样本漂移&#xff0c;导致连续投影未对准&#xff0c;或者由于未散射的电子而导致二维投影中的局部变形。 传统的冷冻电子断层扫描工作流程需要对…

单片机编程的code关键字的诠释

在单片机编程中&#xff0c;code 是一个关键字&#xff0c;用于指示编译器将变量存储在程序存储器中&#xff0c;而不是在数据存储器中。通常情况下&#xff0c;程序存储器的速度比数据存储器的速度更快&#xff0c;而且程序存储器的容量较小&#xff0c;适合存储常量数据和程序…

朗读亭主要作用有哪些?

朗读亭的主要作用有以下几个方面&#xff1a; 1. 提供朗读服务&#xff1a;朗读亭是一个专门的场所&#xff0c;提供给人们朗读的环境和场地。人们可以在朗读亭中选择自己喜欢的书籍或文章&#xff0c;并通过朗读将其表达出来。这样可以帮助人们提高朗读能力&#xff0c;增强自…

2024 angstromCTF re 部分wp

Guess the Flag 附件拖入ida 比较简单&#xff0c;就一个异或 switcher 附件拖入ida 明文flag Polyomino 附件拖入ida 需要输入九个数&#xff0c;然后进入处理和判断&#xff0c;如果满足条件则进入输出flag部分&#xff0c;flag和输入有关&#xff0c;所以要理解需要满足什么…

【408真题】2009-27

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

利用C++与Python调用千帆免费大模型,构建个性化AI对话系统

千帆大模型已于2024年4月25日正式免费&#xff0c;调用这个免费的模型以实现自己的AI对话功能&#xff0c;遵循以下步骤&#xff1a; 了解千帆大模型&#xff1a; 千帆大模型是百度智能云推出的一个平台&#xff0c;提供了一系列AI能力和工具&#xff0c;用于快速开发和应用A…

【以太网端口浪涌静电防护设计电路】

以太网端口浪涌静电防护设计电路 注&#xff1a;资料来自 深圳市浪拓电子技术有限公司 方案图 方案图 方案图 方案图 方案图 方案图 方案图 方案图 方案图 方案图

python如何安装tar.gz

首先我们到官网下载tar.gz。 然后解压我们下载的pip-9.0.1文件&#xff0c;我的解压后放在d&#xff1a;/p下 运行cmd&#xff0c;输入cd d:\p&#xff0c;按回车键&#xff0c;随后再次输入d: 在d:\p>的光标处输入pip-9.0.1\setup.py install&#xff0c;然后按回车键。 最…

水电收费远程抄表

1.前言&#xff1a;从传统到现代的改变 水电收费远程抄表&#xff0c;是科学技术在公共服务领域的一次重要运用&#xff0c;它改变了过去人力上门服务抄表的传统模式&#xff0c;提高了高效率&#xff0c;降低了偏差&#xff0c;为群众与企业带来了极大的便利。这种系统运用智…

【保姆级介绍下Foxmail 邮箱】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

LVM、磁盘配额

LVM与磁盘配额 一、LVM LVM(逻辑卷管理)&#xff1a;是Linux系统下对硬盘分区的管理机制。 LVM机制适合于管理管理大存储设备。可以动态对硬盘进行扩容。 逻辑上的磁盘&#xff0c;概念上的磁盘&#xff0c;文件系统创建之后不考虑底层的物理磁盘。 若干个磁盘分区或者物理…

LORA微调,让大模型更平易近人

技术背景 最近和大模型一起爆火的&#xff0c;还有大模型的微调方法。 这类方法只用很少的数据&#xff0c;就能让大模型在原本表现没那么好的下游任务中“脱颖而出”&#xff0c;成为这个任务的专家。 而其中最火的大模型微调方法&#xff0c;又要属LoRA。 增加数据量和模…

【数据结构与算法 | 链表篇】力扣876

1. 力扣876 : 链表的中间节点 (1). 题 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表…