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-service
      cloud:
        # 配置consul
        consul:
          # consul所在的IP地址
          host: localhost
          # consul所在的端口号
          port: 8500
          discovery:
            # 服务以什么名字注册到 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
        @LoadBalanced
        public 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-service
        cloud:
          # 配置consul
          consul:
            # consul 所在的IP地址
            host: localhost
            # consul 所在的端口号
            port: 8500
            discovery:
              # 服务以什么名字注册到 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的使用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git命令Gitee注册idea操作git超详细

文章目录 概述相关概念下载和安装常见命令远程仓库介绍与码云注册创建介绍码云注册远程仓库操作关联拉取推送克隆 在idea中使用git集成add和commit差异化比较&查看提交记录版本回退及撤销与远程仓库关联 push从远程仓库上拉取&#xff0c;克隆项目到本地创建分支切换分支将…

[redis] 说一说 redis 的底层数据结构

Redis有动态字符串(sds)、链表(list)、字典(ht)、跳跃表(skiplist)、整数集合(intset)、压缩列表(ziplist) 等底层数据结构。 Redis并没有使用这些数据结构来直接实现键值对数据库&#xff0c;而是基于这些数据结构创建了一个对象系统&#xff0c;来表示所有的key-value。 文章…

Django调用MTP服务器给指定邮箱发送邮件

Django调用MTP服务器发送邮箱 邮箱的激活链接含有用户数据不能直接发送需要对其进行加密 发送邮箱是借助SMTP服务器进行中转 一. 配置SMTP服务中的邮箱信息以及激活链接 1. 配置邮箱权限 打开网易邮箱设置点击POP3 开启选项 注 : 在打开的过程中会弹出授权密码一点要保存 …

JavaScript异步编程——02-Ajax入门和发送http请求

同步和异步回顾 同步和异步的简单理解 同步&#xff1a;必须等待前面的任务完成&#xff0c;才能继续后面的任务。 异步&#xff1a;不受当前任务的影响。 拿排队举例&#xff1a; 同步&#xff1a;在银行排队时&#xff0c;只有等到你了&#xff0c;才能够去处理业务。 异…

了解你的构建:发布经理构建难点应对指南

在如今的计算机行业&#xff0c;发布经理的工作任重而道远。一方面他们必须紧跟日益攀升的行业标准&#xff0c;发布速度的极限不断突破&#xff0c;现在要求的速度在过去是远远无法想象的。另一方面&#xff0c;质量的门槛也在不断抬高。 我并非诟病软件更新换代过于迅速频繁…

IT项目管理【太原理工大学】前置知识点精简总结

根据上次考试以及其他方向考试的经验&#xff0c;这届考试可能偏向出题更灵活&#xff0c;能死记硬背或套公式的题减少&#xff0c;多做准备呀各位大三苦逼人&#xff0c;挂了补考还得回来补考凸^-^凸共勉 &#xff08;另外&#xff0c;别作弊&#xff0c;今天人工智能考试逮住…

【Hugging Face】编写 shell 脚本在 huggingface 镜像站快速下载模型文件

前言 我们使用 Git LFS 和 wget 结合的方法&#xff0c;小文件使用 Git 下载&#xff0c;大文件使用 wget 下载 Git 下载的优缺点&#xff1a; 优点&#xff1a;相当简单 缺点&#xff1a;不支持断点续传 直接 wegt 下载比较稳定&#xff0c;但是欠缺优雅 我们可以将这两…

快速找出存(不存在)在某个(或多个)文件的文件夹

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 想要找出有下面这个文件存在的文件夹 切换到批量文件复制版块&#xff0c;快捷键Ctrl5 右侧&#xff0c;搜索添加 选定范围&#xff0c;勾选搜索文件夹、包…

表空间的创建

目录 表空间创建的语法 表空间创建的例子 创建一个永久性表空间&#xff0c;设置表空间初始大小为100MB&#xff0c;自动扩展为 100MB&#xff0c;无最大大小限制&#xff0c;并且该表空间为在线状态&#xff0c;产生日志 创建一个永久性表空间&#xff0c;通过本地化管理方…

Partisia Blockchain 生态首个zk跨链DEX现已上线

在5月1日&#xff0c;由Partisia Blockchain与zkCross创建合作推出的Partisia zkCrossDEX在Partisia Blockchain生态正式上线。Partisia zkCrossDEX是Partisia Blockchain上重要的互操作枢纽&#xff0c;其融合了zkCross的zk技术跨链互操作方案&#xff0c;并利用Partisia Bloc…

北邮22级信通院DSP:实验三(1):FFT变换、IFFT变换(附每步8点变换蝶形图)保姆级讲解+用C++程序实现复数域的FFT变换和IFFT变换

北邮22信通一枚~ 跟随课程进度更新北邮信通院DSP的笔记、代码和文章&#xff0c;欢迎关注~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院DSP_青山入墨雨如画的博客-CSDN博客 目录 一、预备知识 1.1 FFT算法 1.2.1由DFT到FFT 1.2.2 基2时域抽选算法 …

牛客 | 字符金字塔

请打印输出一个字符金字塔&#xff0c;字符金字塔的特征请参考样例 #include <stdio.h> #include <string.h> using namespace std; int main() {char c;scanf("%c", &c);for (int i 1; i < (c - 64); i)//第一个循环决定了有多少行{//c:67 第三…

linux学习:音视频编程+alsa声音架构

目录 概念 采样 量化 编码 音频文件wav 格式 标准音频接口 ALSA 录制音频 步骤 api 获取pcm设备句柄 设置 PCM 设备参数 代码 播放音频 步骤 代码 概念 信号都是模拟信号&#xff0c;不管是声音还是光线&#xff0c;这些模拟信号需要被 A/D 转换器转换成数字信…

02-Fortran基础--Fortran操作符与控制结构

02-Fortran基础--Fortran操作符与控制结构 0 引言1 操作符1.1 数学运算符1.2 逻辑运算符1.3 关系运算符 2 控制流程2.1 条件结构2.2 循环结构2.3 分支结构 0 引言 运算符和控制流程对编程语言是必须的,Fortran的操作符和控制流程涉及到各种数学运算符、逻辑运算符以及控制结构。…

Backblaze发布2024 Q1硬盘故障质量报告-2

截至2024年第一季度末&#xff0c;我们正在跟踪279,572块正在运行的硬盘。硬盘型号在2024年第一季度末必须拥有500块或更多的硬盘&#xff0c;并在整个使用寿命期间累积超过100,000个硬盘工作日&#xff0c;达到这个条件的所有型号盘的故障率趋势表现如下&#xff1a; 除了三种…

Linux快速安装Nginx和重新添加模块

目录 一、Nginx快速安装1、下载Nginx2、配置Nginx模块 二、Ngnix重新编译和安装模块 一、Nginx快速安装 1、下载Nginx 直接进入Nginx官网下载Linux最新稳定版本&#xff0c;我之前下载的版本是1.23.0。 2、配置Nginx模块 下载完后我把源码压缩文件解压放在/opt/appl/nginx…

无卤素产品是什么?有什么作用?

无卤素产品&#xff0c;即在生产过程中完全不使用卤素元素——氟、氯、溴、碘等——的产品。 卤素元素&#xff0c;虽然在电子设备、材料等领域应用广泛&#xff0c;却也可能潜藏危害。其阻燃剂&#xff0c;一旦在产品生命周期结束后释放&#xff0c;将对土壤和水体造成污染&a…

参数配置不生效导致海思1151芯片TPC功率超大,引起性能恶化。

• 【Wi-Fi领域】【现网案例4】参数配置不生效导致海思1151芯片TPC功率超大&#xff0c;引起性能恶化。 【问题描述】XXX客户反馈OLT-HG8245W5-6T–Wi-Fi–WA8021V5-LAN-PC组网概率出现近距离测速只有20Mbps 【问题单】DTS2022101410914 【问题分析】 在客户反馈此问题后&#…

【MM32F3270 Micropython】pwm输出

文章目录 前言一、PWM脉宽调制技术介绍二、machine.PWM 类2.1 machine.PWM 类的构造对象2.2 PWM 对象初始化2.3 关闭PWM设备2.4 设置pwm的周期2.5 设置占空比 三、pwm示例代码总结 前言 MicroPython是一种精简的Python 3编程语言实现&#xff0c;旨在在微控制器和嵌入式系统上…

基于CLAHE算法的图像增强及评价

摘要&#xff1a; 本研究旨在探讨对比度限制自适应直方图均衡化&#xff08;CLAHE&#xff09;算法在数字图像处理中的应用。CLAHE算法通过在局部区域内进行直方图均衡化&#xff0c;有效地增强了图像的对比度&#xff0c;并在保持图像细节的同时避免了过度增强的问题。本文通过…