consul服务注册发现与配置中心

目录

1 consul安装与运行

1.1 下载方式

1.2 安装

1.3 启动

1.4 访问方式

2 consul 实现服务注册与发现

2.1 引入

2.2 服务注册

2.3 服务发现

3 consul配置中心

3.1 基础配置


Eureka已经停止更新了,consul是独立且和微服务功能解耦的注册中心,而不是单独作为一个独立微服务嵌入到系统中。


1 consul安装与运行

1.1 下载方式

官网下载:https://www.consul.io/downloads

百度网盘链接:https://pan.baidu.com/s/1gKdyGMgpLU-jGMN_0s8R0Q  提取码:cvol

1.2 安装

下载之后就只有一个consul.exe文件,在对应路径下输出cmd进行终端,输出命令:

consul --version

consul --version 显示正常的版本信息,说明consul下载及安装完成

1.3 启动

consul agent -dev

consul agent -dev,输入该命令,使用开发模式启动consul

1.4 访问方式

通过地址http://localhost:8500访问到consul的首页。

2 consul 实现服务注册与发现


2.1 引入

通过下面的方式将一个微服务的IP地址和端口号硬编码另一个微服务中(例如订单微服务调用支付微服务),会存在这许多的问题:

/*** 这里采用的是硬编码的地址,可扩展性低下*/
public static final String PAYMENT_SERVICE_URL = "http://localhost:8001";

① 如果订单微服务和支付微服务的IP地址或者端口号发生了变化,则支付微服务将变得不可用,需要同步修改订单微服务中调用支付微服务的IP地址或端口。
② 如果系统中提供了多个订单微服务和支付微服务,则无法实现微服务的负载均衡
③ 如果系统需要支持高并发,需要部署更多的订单微服务和支付微服务,硬编码订单服务则后续的维护会变得异常复杂
所以,在微服务开发的过程中,需要引入服务治理功能,实现微服务之间的动态注册与发现

2.2 服务注册

第一步,修改pom.xml文件添加相关的依赖:

<!--引入consul-discovery-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency> 


第二步,在application.yml文件中添加相关的配置项:

spring:application:# 设置服务名称name: cloud-payment-servicecloud:# 配置consulconsul:# consul所在的IP地址host: localhost# consul所在的端口号port: 8500discovery:# 服务以什么名字注册到 consul 中service-name: ${spring.application.name}# 验证tokenacl-token: xxxxxx# 开启心跳模式,如果不开启服务注册后一直是红×heartbeat:enabled: true

第三步,启动微服务,并且访问http://localhost:8500查看服务是否注册成功:

2.3 服务发现

这个时候所有的微服务都注册到了consul注册中心中了,我们可以将上面的硬编码的代码修改为下面的代码了:

//注意这里的 cloud-payment-service 必须和上面你注册到 consul 中微服务名字保存一直。
public static final String PAYMENT_SERVICE_URL = "http://cloud-payment-service";


通过上面的步骤,Feign微服务或者Http请求都可以注册到consul上,进行微服务之间的调用。

3 consul配置中心

3.1 基础配置

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。比如某些配置文件中的内容大部分都是相同的,只有个别的配置项不同。就拿数据库配置来说吧,如果每个微服务使用的技术栈都相同,则每个微服务中关于数据库的配置几乎都是相同的,有时候主机迁移了,我希望一次修改,处处生效。
consul提供了通用全局配置信息的功能,直接注册进consul服务器,从consul获取。

第一步,修改pom.xml文件添加相关的依赖:

<!--引入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>

第二步,新增配置文件bootstrap.yml,将application.yml文件中的通用的配置信息放到文件中:

  1.  applicaiton.yml是用户级的资源配置项
  2. bootstrap.yml是系统级的,优先级更加高
  3. Spring Cloud会创建一个"Bootstrap Context",作为Spring应用的Application Context的父上下文。初始化的时候,Bootstrap Context负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的Environment。
  4. Bootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖。 Bootstrap context和Application Context有着不同的约定,所以新增了一个bootstrap.yml文件,保证Bootstrap Context和Application Context配置的分离。
  5. 将application.yml文件改为bootstrap.yml这是很关键的或者两者共存

因为bootstrap.yml是比application.yml先加载的。bootstrap.yml优先级高于application.yml 

  • bootstrap.yml
spring:application:# 设置服务名称name: cloud-payment-servicecloud:# 配置consulconsul:# consul 所在的IP地址host: localhost# consul 所在的端口号port: 8500discovery:# 服务以什么名字注册到 consul 中service-name: ${spring.application.name}# 开启心跳模式,如果不开启服务注册后一直是红×heartbeat:enabled: true# 分布式配置config:enabled: true     #是否开启配置中心format: yaml      #配置文件格式,这里用的yamlprofile-separator: "-"  #例如: service-provider和dev中间的符号 用-就是service-provider-devdata-key: data    #默认的值就是data  是config的key  写上方便阅读prefix: config    #默认的值就是config   是配置的前缀  写上方便阅读

     第三步,consul服务器key/value配置填写

              

config是前缀,order-service是应用名,dev是环境,data是数据配置

第四步,测试

@Value("${test.num}")
private String num;

第五步,consul控制台修改配置值之后,代码中也会动态刷新


参考:

SpringCloud——consul_consul怎么安装-CSDN博客

入门Consul注册、配置中心(代码演示)_consul配置-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Tomcat 后台弱⼝令部署war包

漏洞原理 在tomcat8环境下默认进⼊后台的密码为 tomcat/tomcat &#xff0c;未修改造成未授权即可进⼊后台&#xff0c;或者管理员把密码设置成弱⼝令。 影响版本 全版本(前提是⼈家存在弱⼝令) 环境搭建 8 cd vulhub-master/tomcat/tomcat8 docker-compose up -d 漏洞复…

Python基于flask框架的智能停车场车位系统 数据可视化分析系统fyfc81

目录 技术栈和环境说明解决的思路具体实现截图系统设计python语言django框架介绍flask框架介绍性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示技术路线操作可行性详细视频演示源码获取 技术栈和环境说明 结合用户的使用需求&…

引领长期投资新篇章:价值增长与财务安全的双重保障

随着全球金融市场的不断演变&#xff0c;长期投资策略因其稳健性和对价值增长的显著推动作用而日益受到投资者的重视。在这一背景下&#xff0c;Zeal Digital Shares&#xff08;ZDS&#xff09;项目以其创新的数字股票产品&#xff0c;为全球投资者提供了一个全新的长期投资平…

flutter遇到问题及解决方案

目录 1、easy_refresh相关问题 2、 父子作用域关联问题 3. 刘海屏底部安全距离 4. 了解保证金弹窗 iOS端闪退 &#xff08;待优化&#xff09; 5. loading无法消失 6. dialog蒙版问题 7. 倒计时优化 8. scrollController.offset报错 9. 断点不走 10.我的出价报红 11…

大气网格化精细化监管监测系统

大气网格化精细化监管监测系统是一种先进的环境监测与管理手段&#xff0c;它通过安装传感器、监测设备等手段&#xff0c;对大气环境进行精细化监测和控制。以下是朗观视觉小编对该系统的详细介绍&#xff1a; 一、系统概述 大气网格化精细化监管监测系统利用网格化布点技术&…

linux入门到实操-9 linux文件操作命令:创建文件、复制文件或文件夹、删除和移动文件、多种查看文件的方法

教程来源&#xff1a;B站视频BV1WY4y1H7d3 3天搞定Linux&#xff0c;1天搞定Shell&#xff0c;清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料&#xff08;包含课程同版本linux系统文件等内容&#xff09;&#xff0c;供大家学习交流下载&#xff1a;…

Qt 构建版本

Qt提供了三种不同的构建版本&#xff1a;Debug版本&#xff08;调试版本&#xff09;、Release版本&#xff08;发布版本&#xff09;和Profile版本&#xff08;概述版本&#xff09;&#xff0c;每种版本都有其特定的用途和编译设置。 Debug版本&#xff08;调试版本&#x…

Highcharts甘特图基本用法(highcharts-gantt.js)

参考官方文档&#xff1a; https://www.highcharts.com/docs/gantt/getting-started-gantt https://www.highcharts.com/demo/gantt/project-management https://www.hcharts.cn/demo/gantt 链接在下面按需引入 https://code.highcharts.com/gantt/highcharts-gantt.js htt…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(三)-文档

文档 文档服务负责写入&#xff0c;包括批量&#xff1b;id获取文档&#xff1b;nested写入 写入文档 写入文档主要是构建IndexRequest&#xff0c;索引请求 Elasticsearch v8构建文档索引请求简单很多&#xff0c;可以直接接受Map数据 批量写入文档 批量操作可以融合增删改…

你必须要懂的网络安全知识

不管是网工还是运维&#xff0c;都应该对网络安全的重要性非常清楚&#xff0c;每一次数据泄露、每一次网络攻击&#xff0c;都可能给企业带来不可估量的损失。 从SQL注入到跨站脚本攻击&#xff08;XSS&#xff09;&#xff0c;从分布式拒绝服务攻击&#xff08;DDoS&#xf…

科斯托拉尼的投机智慧:洞察人性与市场预期——《大投机家》读后感

《大投机家》是安德烈科斯托拉尼对投机艺术的深入探讨&#xff0c;也是一部充满智慧的投资哲学书籍。在他看来&#xff0c;投机不仅仅是追逐利润的游戏&#xff0c;而是对人性、市场预期、信息捕捉与解读的一场深刻博弈。如何在瞬息万变的股市中立于不败之地&#xff1f;科斯托…

VSCode 定义Java类注释

在使用 VSCode 开发 Java 时&#xff0c;输入 /** 生成的类注释如下&#xff1a; /*** */这样的注释一片空白&#xff0c;无法标注类的作者、创建时间等信息。 可以通过如下设置实现更贴合 Java 类的注释&#xff1a; 进入 Java 配置 输入 settings.json ​ 选择 Prefere…

【北京迅为】《STM32MP157开发板使用手册》-第四十三章 软件定时器实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

Vue使用axios实现Ajax请求

1、什么是 axios 在实际开发过程中&#xff0c;浏览器通常需要和服务器端进行数据交互。而 Vue.js 并未提供与服务器端通信的接口。从 Vue.js 2.0 版本之后&#xff0c;官方推荐使用 axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端。 关于 promise 的介绍…

【Day03-MySQL单表】

数据库 数据库介绍 什么是数据库 数据存储的仓库&#xff0c;其本质也是一个文件系统 数据库会按照特定的格式对数据进行存储&#xff0c;用户可以对数据库中的数据进行增加&#xff0c;修改&#xff0c;删除及查询操作。 数据库管理系统层次 数据库管理系统 (DataBase Ma…

安装python包的四种常用方式

前言 Pycharm使用过程中总是需要根据任务安装一些python的包&#xff0c;有时候还会遇到某些包安装失败&#xff0c;今天总结了四种常见的安装方式&#xff0c;希望在一种方式安装失败的情况下&#xff0c;可以换其他方式进行尝试安装。 一、鼠标点击安装 1. Python Interpre…

qt--Qml控件库如何从外部导入

文章目录 两种方案方案1 给项目添加子项目方案2 使用pri文件 综合来说 &#xff1a; 两种方案 方案1 给项目添加子项目 利用git的特性 对应的子项目就是我们的控件库 然后需要哪个控件 在父项目的qrc路径进行导入 即可将控件库里面的控件给导入项目 在使用的时候 使用模…

通过蓝图Blueprint完成项目拆分、模块化以及模块化后项目结构分析

1、不拆分项目之前的写法 在上一篇Flask入门和视图中我们讲解了Flask项目的一个启动流程&#xff0c;引入Flask、创建Flask对象&#xff0c;然后由路由进入在视图函数中通过模版渲染或者json系列化的方式返回页面或者数据。我们发现这些所有的操作都是在一个页面中完成的&…

不只是模仿,伯克利新研究赋予机器人跨实体自主学习的能力,零样本时代已来

导读&#xff1a; 在当今科技飞速发展的时代&#xff0c;机器人技术正不断地给我们带来惊喜和变革。2024 年 9 月&#xff0c;一篇来自加州大学伯克利分校、丰田研究所和Physical Intelligence 的研究论文RoVi-Aug: Robot and Viewpoint Augmentation for Cross-Embodiment Rob…

C++ | 二叉搜索树

前言 本篇博客讲解c中的继承 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&…