SpringCloud——consul

SpringCloud——consul

  • 一、consul安装与运行
  • 二、consul 实现服务注册与发现
    • 1.引入
    • 2.服务注册
    • 3.服务发现
  • 三、consul 分布式配置
    • 1.基础配置
    • 2.动态刷新
    • 3.配置持久化
  • 四、参考

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

一、consul安装与运行

  • 下载路径,下载完成后只有一个consul.exe文件,在对应路径下输入cmd进入终端,输入命令consul --version,如果能够正常的显示出版本信息,说明consul下载的版本正确并且安装完成。
  • 输入命令consul agent -dev,使用开发模式启动consul
    在这里插入图片描述
  • 通过地址http://localhost:8500访问到onsul的首页。
    在这里插入图片描述

二、consul 实现服务注册与发现

1.引入

  • 通过下面的方式将一个微服务的IP地址和端口号硬编码另一个微服务中(例如订单微服务调用支付微服务),会存在这许多的问题:
    /*** 这里采用的是硬编码的地址,可扩展性低下*/
    public static final String PAYMENT_SERVICE_URL = "http://localhost:8001";
    
    • ① 如果订单微服务和支付微服务的IP地址或者端口号发生了变化,则支付微服务将变得不可用,需要同步修改订单微服务中调用支付微服务的IP地址或端口。
    • ② 如果系统中提供了多个订单微服务和支付微服务,则无法实现微服务的负载均衡
    • ③ 如果系统需要支持高并发,需要部署更多的订单微服务和支付微服务,硬编码订单服务则后续的维护会变得异常复杂。
  • 所以,在微服务开发的过程中,需要引入服务治理功能,实现微服务之间的动态注册与发现。

2.服务注册

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

    <!--引入consul-discovery-->
    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>	
    
    • 控制台出现如下信息:Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts。这个信息对代码没有任何的影响,但是如果你有强迫症可以使用下面的方式解决掉:
      <!--引入consul-discovery-->
      <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>	
      
  • 第二步,在application.yml文件中添加相关的配置项:

    spring:application:# 设置服务名称name: cloud-payment-servicecloud:# 配置consulconsul:# consul所在的IP地址host: localhost# consul所在的端口号port: 8500discovery:# 服务以什么名字注册到 consul 中service-name: ${spring.application.name}# 开启心跳模式,如果不开启服务注册后一直是红×heartbeat:enabled: true
    
  • 第三步,启动微服务,并且访问http://localhost:8500查看服务是否注册成功:
    在这里插入图片描述

3.服务发现

  • 这个时候所有的微服务都注册到了consul注册中心中了,我们可以将上面的硬编码的代码修改为下面的代码了:
    //注意这里的 cloud-payment-service 必须和上面你注册到 consul 中微服务名字保存一直。
    public static final String PAYMENT_SERVICE_URL = "http://cloud-payment-service";
    
  • 注意,consul默认就是支持负载均衡的,所以如果你不做负载均衡的话会报错
  • 在你的RestTemplateConfig配置类中添加,@LoadBalanced注解:
    @Configuration
    public class RestTemplateConfig {/*** 使用 @LoadBalanced 注解赋予 RestTemplate 负载均衡的能力* 默认使用的轮询负载均衡策略*/@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
    }
    
  • 通过上面的两步,也就可以实现微服务之间的通信了。

三、consul 分布式配置

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文件中的通用的配置信息放到文件中:
    • applicaiton.yml是用户级的资源配置项
    • bootstrap.yml是系统级的,优先级更加高
    • Spring Cloud会创建一个"Bootstrap Context",作为Spring应用的Application Context的父上下文。初始化的时候,Bootstrap Context负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的Environment
    • Bootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖。 Bootstrap contextApplication Context有着不同的约定,所以新增了一个bootstrap.yml文件,保证Bootstrap ContextApplication Context配置的分离。
    • 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:# default value is ",",we update '-'profile-separator: '-'# setting config document style;format: yaml
      
  • 第三步,consul服务器key/value配置填写:
    • consul上创建全局配置文件,需要按照固定的规则创建
      在这里插入图片描述
      • 这里的cloud-payment-service是你注册的服务名字,后面的-dev、-prod是在表示在不同的环境中使用不同的配置,需要在application.yml文件中配置spring.profiles.active: 环境名dev、prod
        在这里插入图片描述
        在这里插入图片描述
  • 第四步,编写测试代码测试:
    @GetMapping(value = "/pay/get/info")
    private String getInfoByConsul(@Value("${gdb.info}") String info) {return "consul info: " + info + ",port: " + port;
    }
    
    在这里插入图片描述

2.动态刷新

  • 在上面我们完成了consul的全局配置,但是如果我们现在修改配置信息,后续访问配置信息没有生效。
    在这里插入图片描述
  • 第一步:在配置类上添加注解@RefreshScope,启用consul的动态刷新:
    @SpringBootApplication
    @MapperScan("com.gdb.cloud.mapper")
    @RefreshScope //启动 consul 全局配置的动态刷新功能
    public class Main8001 {public static void main(String[] args) {SpringApplication.run(Main8001.class, args);}
    }
    

3.配置持久化

  • 上面我们配置了key/value值,但是我们启动的方式是开发模式dev,每次我们重新启动consul的时候,数据就会消失,我们可以通过服务模式server启动,这样我们就可以保存配置了。

    consul agent -server -ui -bootstrap-expect 1 -data-dir 自己本地保存的数据地址 -node=n1 -bind=127.0.0.1


四、参考

[1]. 使用 consul 实现服务注册与发现
[2]. Consul注册中心注册的服务总是红叉 (All service checks failing)
[3]. Consul心跳机制
[4]. consul入门案例及配置热更新的实现及Feign的使用

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

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

相关文章

Ubuntu20.04 OpenCV详细安装教程(附多版本切换共存教程)

opencv安装有两种方式&#xff1a; 1.使用包管理器安装预编译版本&#xff08;安装十分简单&#xff0c;但是版本只有4.2.0&#xff0c;且没有扩展模块且不支持Qt窗口&#xff09; 2.从源码安装&#xff08;比较复杂&#xff0c;但是推荐&#xff09; 1.安装预编译版本 sud…

一文搞懂前端跨页面通信的那些方案们

前端开发逃避不开跨页面通信这项工作&#xff0c;跨页面通信&#xff0c;就好比A页面要和B页面说话&#xff0c;可能只是说一句话&#xff0c;不需要回话&#xff0c;可能是要给一些东西&#xff0c;希望得到回复&#xff0c;并频繁进行沟通&#xff0c;接下来我们说说这些跨页…

『MySQL 实战 45 讲』20 - 幻读是什么,幻读有什么问题?

幻读是什么&#xff0c;幻读有什么问题&#xff1f; 需求&#xff1a;创建一个小表 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),KEY c (c) ) ENGINEInnoDB;insert into t values(0,0,0),(5,5,5), (10,10,10),(15,…

TriCore User Manual 笔记 1

说明 本文是 英飞凌 架构文档 TriCore TC162P core archiecture Volume 1 of 2 (infineon.com) 的笔记&#xff0c;稍作整理方便查阅&#xff0c;错误之处&#xff0c;还请指正&#xff0c;谢谢 :) 1. Architecture 2. General Purpose & System Register 名词列表&#…

探索数据结构

什么是数据结构 数据结构是由&#xff1a;“数据”与“结构”两部分组成 数据与结构 数据&#xff1a;如我们所看见的广告、图片、视频等&#xff0c;常见的数值&#xff0c;教务系统里的&#xff08;姓名、性别、学号、学历等等&#xff09;&#xff1b; 结构&#xff1a;当…

远动通讯屏功能和作用

远动通讯屏功能和作用 首先大家要先了解&#xff0c;什么叫远动通讯&#xff1f;远动通讯是电力系统指用于远程通信和远程控制的设备。它主要采集电发场站的电气运行参数与远程调度监控中心进行数据交互&#xff0c;并接收调度中心远程的指令控制。提高电力系统的运行效率和可靠…

使用perf查看热点函数和系统调用最大延迟函数

1、安装perf工具 1.1、ubuntu 18.04 x86下的安装 安装sudo apt install linux-source sudo apt install linux-tools-uname -r # ubuntu 18.04虚拟机实操可行 1.2、ubuntu 18.04 ARM下的安装 参考 Nvidia Jetson系列产品安装Perf ​ARM64版本的Ubuntu上安装perf 与参考文…

汽车灯罩使用聚碳酸酯(PC)和PMMA(亚克力)哪个更好?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车灯罩使用聚碳酸酯&#xff08;PC&#xff09;和PMMA&#xff08;亚克力&#xff09;哪个更好&#xff1f; 聚碳酸酯&#xff08;PC&#xff09;和PMMA&#xff08;亚克力&#xff09;都是汽车灯罩常见的材质&#xff0c;它们各自具有独特的优点和特性&#xff0c;因此选择…

更专业的汽车软件研发工具链,怿星重磅发布新产品

怿星科技在2024北京国际车展同期举办主题为“创新引领未来——聚焦智能汽车软件新基建”的新产品发布会&#xff0c;重磅推出1款绝对优势产品和4套场景解决方案。同时举行了4场热点技术研讨&#xff1a;国产工具链的机遇与挑战、新架构下的的车载DDS应用探索及测试方案介绍、软…

微店商品详情API接口:打造个性化电商体验的利器

前言 随着电子商务的快速发展&#xff0c;越来越多的商家开始注重线上店铺的个性化建设和用户购物体验的优化。在这个过程中&#xff0c;API&#xff08;应用程序接口&#xff09;技术发挥着至关重要的作用。本文将重点介绍微店商品详情API接口&#xff0c;探讨其如何帮助商家提…

高压开关柜局部放电监测装置APD

安科瑞薛瑶瑶18701709087/17343930412 APD系列高压柜局部放电监测装置通过检测伴随局部放电而产生的电磁波辐射&#xff0c;实时监测的开关柜内局部放电的放电次数和放电频次等数据&#xff0c;对电气设备绝缘状况进行评估&#xff0c;发现设备潜伏性故障&#xff0c;最终实现…

docker 方式 elasticsearch 8.13 简单例子

安装 docker 虚拟机安装 elastic search 安装本地 # 创建 elastic 的网络 docker network create elastic # 用镜像的方式创建并启动容器 docker run -d --name es --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e "xpack.secur…

API开发淘宝(京东)API接口:获取淘宝京东等平台数据的api接口分享

接口应用场景——电商产品定价 电商平台产品的定价问题是很多品牌非常重视的一个问题&#xff0c;产品的定价取决于很多因素&#xff0c;包括成本、供需情况、促销策略及竞争对手的价格等。因此&#xff0c;想要更合理地定价&#xff0c;品牌需要获取到影响产品定价的各类数据&…

【Linux】17. 进程间通信 --- 管道

1. 什么是进程间通信(进程间通信的目的) 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了…

团队执行力差,多半都是管理的问题

在日常管理中&#xff0c;我们习惯用“执行力好不好”来评价一个团队的表现&#xff0c;但实际上&#xff0c;执行力更应该是一个管理者需要思考和解决的问题&#xff0c;而非单纯归咎于团队。 我们需要明确一点&#xff1a;执行力不是团队的问题&#xff0c;而是管理者的问题…

比亚迪CAN数据实时监控分析应用数字化差异化的决策价值洞察

在当今这个信息化飞速发展的时代&#xff0c;汽车数字化转型已成为企业持续竞争力的关键。中国新能源汽车行业的领军企业——比亚迪&#xff0c;其数字化之旅充分展现了企业的创新精神和对未来的深远洞察。 比亚迪的数字化战略不是简单的技术应用&#xff0c;而是一场深刻的商…

C++奇迹之旅:string类对象的容量操作

文章目录 &#x1f4dd; string类的常用接口&#x1f309; string类对象的容量操作&#x1f320;size&#x1f320;length&#x1f320;capacity&#x1f320;clear&#x1f320;empty&#x1f320;reserve&#x1f309;resize &#x1f6a9;总结 &#x1f4dd; string类的常用…

大数据集成平台建设方案-word原件资料

基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&#xff1a; (1) 基于平台的基础架构&…

【优选算法】——Leetcode——611. 有效三角形的个数

目录 ​编辑 1.题目 2 .补充知识 3.解法⼀&#xff08;暴⼒求解&#xff09;&#xff08;可能会超时&#xff09;&#xff1a; 算法思路&#xff1a; 算法代码&#xff1a; 4.解法⼆&#xff08;排序双指针&#xff09;&#xff1a; 算法思路&#xff1a; 以输入: nums …

多个glibc库存在时如何查看ldd调用的哪个

但是发现存在多个版本的glibc版本&#xff0c;需要查看具体的库的信息&#xff0c;和相应的关键函数的信息&#xff0c;但是并不知道具体的libc.so.6的路径信息 rootalg-dev04:~/xingqiao# ldd --version ldd (GNU libc) 2.29 rootalg-dev04:/opt# which ldd /usr/local/bin/…