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

news2024/9/20 18:39:36

目录

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-service
  cloud:
    # 配置consul
    consul:
      # consul所在的IP地址
      host: localhost
      # consul所在的端口号
      port: 8500
      discovery:
        # 服务以什么名字注册到 consul 中
        service-name: ${spring.application.name}
        # 验证token
        acl-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-service
  cloud:
    # 配置consul
    consul:
      # consul 所在的IP地址
      host: localhost
      # consul 所在的端口号
      port: 8500
      discovery:
        # 服务以什么名字注册到 consul 中
        service-name: ${spring.application.name}
        # 开启心跳模式,如果不开启服务注册后一直是红×
        heartbeat:
          enabled: true
      # 分布式配置
      config:
        enabled: true     #是否开启配置中心
        format: yaml      #配置文件格式,这里用的yaml
        profile-separator: "-"  #例如: service-provider和dev中间的符号 用-就是service-provider-dev
        data-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.coloradmin.cn/o/2149704.html

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

相关文章

黎巴嫩通信设备爆炸初步分析

这两天比较轰动的事&#xff0c;当属中东地区发生的一系列通信设备爆炸事件。下面分析下怎么炸的 1、为什么要用传呼机 传呼机是上世纪八九十年代流行的通信装备&#xff0c;在中国大陆已经基本绝迹&#xff0c;但在世界范围内依然广泛使用&#xff0c;因此它的产业链还活着。…

如何快速修改CSDN代码块或者主题的字体颜色

第一步登录你的CSDN账号然后点击你的头像 第二步点击下拉框中的“内容管理” 第三步&#xff0c;点击“博客设置” 第四步&#xff0c;点击“等级”选择喜欢的主题和颜色 第五步&#xff0c;选择代码块的主题和颜色 最后保存刷新就可以了。

Mybatis Plus分页查询返回total为0问题

Mybatis Plus分页查询返回total为0问题 一日&#xff0c;乌云密布&#xff0c;本人看着mybatis plus的官方文档&#xff0c;随手写了个分页查询&#xff0c;如下 Page<Question> questionPage questionService.page(new Page<>(current, size),questionService.g…

一体化平台数据中心安全建设方案(Word完整原件)

第 一 章 信息安全保障系统 1.1 系统概述 1.2 安全标准 1.3 系统架构 1.4 系统详细设计 1.4.1 计算环境安全 1.4.2 区域边界安全 1.4.3 通信网络安全 1.4.4 管理中心安全 1.5 安全设备及系统 1.5.1 VPN加密系统 1.5.2 入侵防御系统 1.5.3 防火墙系统 1.5.4 安全审计系统 1.5.5 …

基于 ROS 的Terraform托管服务轻松部署ChatGLM2-6B

介绍 ChatGLM2-6B是开源中英双语对话模型ChatGLM-6B的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础上&#xff0c;ChatGLM2-6B具有更强大的性能、更长的上下文、更高效的推理等特性。 资源编排服务&#xff08;Resource Orchestration…

谈对象第二弹: C++类和对象(中)

文章目录 一、类的默认成员函数二、构造函数三、析构函数四、拷贝构造函数五、运算符重载5.1运算符重载5.2赋值运算符重载5.3实现日期类<<、>>重载检查、获取天数关系运算符重载算数、赋值运算符重载Date.hDate.cpp 六、取地址运算符重载6.1const成员函数6.2取地址…

PyTorch使用------自动微分模块

目录 &#x1f354; 梯度基本计算 1.1 单标量梯度的计算 1.2 单向量梯度的计算 1.3 多标量梯度计算 1.4 多向量梯度计算 1.5 运行结果&#x1f4af; &#x1f354; 控制梯度计算 2.1 控制不计算梯度 2.2 注意: 累计梯度 2.3 梯度下降优化最优解 2.4 运行结果&#x1…

在grafana上配置显示全部node资源信息概览

在grafana上配置显示全部node资源信息概览&#xff0c;便于巡检 1&#xff0c;注册grafana官网账号&#xff1a;Grafana dashboards | Grafana Labs&#xfeff; 2、寻找可以展示所有node资源概览信息的dashboard&#xff0c;并下载支持prometheus数据源的dashboard&#xff…

论文开题不用愁,5步带你轻松搞定研究计划!

开题报告是每位研究生在论文写作初期必须完成的一项重要任务。它不仅是对自己研究方向的初步规划&#xff0c;也是导师和评审专家衡量课题可行性的重要依据。一份优秀的开题报告不仅能够清晰阐述研究的背景、目的和意义&#xff0c;还能展示研究的创新性和可行性&#xff0c;从…

与谷歌旗下自动驾驶公司扩大合作后,Uber股票值得买入吗?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;与Waymo扩大在无人驾驶出租车方面的合作后&#xff0c;Uber的股价上涨了5%。 &#xff08;2&#xff09;Uber的第二季度的财务业绩非常强劲&#xff0c;收入增长了…

【Python】练习:控制语句(二)第4关

第4关&#xff1a;控制结构综合实训 第一题第二题&#xff08;※&#xff09;第三题&#xff08;※&#xff09;第四题&#xff08;※&#xff09;第五题&#xff08;※&#xff09;第六题&#xff08;※&#xff09; 第一题 #第一题def rankHurricane(velocity):#请在下面编写…

[Simpfun游戏云1]搭建MC Java+基岩互通生存游戏服务器

众所周知&#xff0c;MC有多个客户端&#xff0c;像常见的比如Java Edition和基岩等&#xff0c;这就导致&#xff0c;比如我知道一个超级好玩的JE服务器&#xff0c;但我又想使用基岩版来玩&#xff0c;肯定是不行的&#xff0c;因为通讯协议不一样。 这就有一些人才发明了多…

浅谈死锁以及判断死锁的方法

引言 我们在并发情况下见过很多种锁&#xff0c;synchronized&#xff0c;ReentrantLock 等等&#xff0c;这些锁是为了保证线程安全&#xff0c;使线程同步的锁&#xff0c;与今天所要学习的死锁并不相同&#xff0c;死锁并不是一种锁&#xff0c;而是一种现象。 官方定义&a…

Live800:从心出发,以情动人:构建深度客户服务文化

在当今这个竞争激烈的市场环境中&#xff0c;企业之间的较量已不仅仅局限于产品质量的比拼&#xff0c;更在于谁能提供更优质、更贴心的客户服务。在这个背景下&#xff0c;“从心出发&#xff0c;以情动人”成为了构建深度客户服务文化的核心理念&#xff0c;它要求企业不仅要…

Nacos注册中心(Nacos安装,快速入门,多级存储,负载均衡,环境隔离,配置管理,热更新,集群搭建,nginx反向代理)

Nacos注册中心 1. Nacos安装 (windows) 1.1 官网下载 网址:https://github.com/alibaba/nacos/releases/tag/1.4.1 这里下载nacos1.4.1的Windows版本为例1.2 解压到本地 注: 解压到非中文目录 nacos默认端口号:8848,可在配置文件properties中修改1.3 启动nacos 在G:\Sp…

基于单片机的智能电话控制系统设计

摘要&#xff1a; 为了能够使用电话实现电器设备的控制&#xff0c;文中通过单片机及双音多频解码集成电路&#xff0c;使用用 户通过电话输入相应的指令就能够实现远程设备的智能化控制。文章主要对系统的构成、软件及 硬件设计进行了简单的介绍&#xff0c;并且对其中的电路…

前端vue-v-for循环遍历

&#xff08;item,index&#xff09;in list中&#xff0c;index这个索引可加可不加&#xff0c;item代表list中的每一个元素&#xff0c;list可以是数组&#xff0c;也可以是对象&#xff0c;要遍历谁就把 &#xff08;item,index&#xff09;in list加在哪里。 关于加不加&a…

抓机遇,促发展——2025第十二届广州国际汽车零部件加工技术及汽车模具展览会

新能源时代&#xff0c;电动化、智能化正在重塑全球汽车市场格局。中国自主品牌新能源汽车的市占率不断提升、头部效应初显&#xff0c;更有机会带动相关供应链企业成长。中国的零部件企业有望抓住变局下的机会&#xff0c;在新一轮竞争中崛起。 智能电动车时代&#xff0c;汽车…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核通信机制】上

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核&#xff08;LiteOS-M&#xff09; 轻量系统内核&#…

操作系统迁移(CentOs -> Ubuntu)

目录 1. CentOs操作系统:备份数据 1.1 gitee备份 1.1.1 CentOs安装git 1.1.1.1 运行安装命令 1.1.1.2 运行安装命令时出错 1.1.1.3 再次执行安装命令 1.1.2 gitee创建仓库 1.1.2.1 创建仓库 1.1.3 备份 1.1.3.1 复制链接 1.1.3.2 克隆仓库 1.1.3.3 备份 1.3.3.4 查…