SpringCloud学习笔记-2
说明:来源于网络,如有侵权请联系我删除
1.提问:如果注册中心宕机,远程调用还能成功吗
答:当微服务发起请求时,会向注册中心请求所有的微服务地址,然后在向指定的微服务地址发起请求。在设计实现时,如果每次都向注册中心发起请求,然后在调用微服务地址,这样浪费性能。这时会有一个实例缓存的东西来解决这一问题。当发起请求时,先从实例缓存中查找,如果有,就直接用里面的微服务地址调用。如果没有,就向注册中心发起请求,获取微服务地址,然后在放入实例缓存中,接着调用微服务地址,下次调用时,就直接从实例缓存中拿来用。同时实例缓存和注册中心也是有一个实时更新的同步机制。了解了这样的一个设计原理,那么这个问题就比较好回答了。
分两个情况,如果这个微服务地址没有访问过,那么需要向注册中心请求获取地址,这时如果注册中心宕机,那么是无法获取地址的,也就无法访问两天。如果这个地址被访问过,那么它就会被放在实例缓存里面,此时优先从实例缓存中拿地址,而并不需要从注册中心请求,这种情况,是可以正常访问这个微服务地址的。
2.Nacos配置中心
nacos配置中心可以配置微服务的变量,同时支持不停机更新,很方便
按上图操作,即可实现nacos配置
1.启动nacos
下载nacos后,进入bin目录,然后打开cmd,运行如下命令:
D:\soft\nacos-server-2.4.3\nacos\bin>startup.cmd -m standalone
2.配置依赖
1)在services的pom文件中引入依赖
<!--nacos配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
3.application.properties配置
在order的application.properties里面配置如下:
spring.config.import=nacos:service-order.properties
4.nacos页面配置数据集
在nacos页面配置列表里面点击创建配置
填入以下信息如下图,配置格式选择Properties
service-order.propertiesorder.timeout=30min
order.auto-confirm=7d
右下角点击发布
5.代码中使用配置的信息
1)在order微服务中编写代码
@Value("${order.timeout}")private String timeOut;@Value("${order.auto-confirm}")private String aotuConfirm;//获取配置@GetMapping("/getConfig")public String getConfig(){return "timeout: "+timeOut + "; auto-confirm" +aotuConfirm;}
2)重启服务,并在浏览器输入http://localhost:8000/getConfig 回车
可以看到已经成功引用了nacos配置的内容
如果想在nacos中修改了配置内容后,不用重启微服务就可生效,可以加一个注解
@RefreshScope
@RefreshScope@RestController
public class OrderController {@Value("${order.timeout}")private String timeOut;@Value("${order.auto-confirm}")private String aotuConfirm;@AutowiredOrderService orderService;//创建订单@GetMapping("/create")public Order createOrder(@RequestParam("userId")Long userId,@RequestParam("productId")Long productId){Order order = orderService.createOrder(productId,userId);return order;}//获取配置@GetMapping("/getConfig")public String getConfig(){return "timeout: "+timeOut + "; auto-confirm" +aotuConfirm;}}
可以修改下nacos中的数据验证,记得需要发布后才生效
3.Nacos配置中心自动刷新
当数据量很多的时候,上面的配置就不太方便了。可以使用如下方式:
1)创建配置类
输入properties.OrderProperties,生成如下类
@Component
@ConfigurationProperties(prefix="order")
@Data
public class OrderProperties {String timeOut;String autoConfirm;}
其中注解@ConfigurationProperties 指定以order开头的变量。类里面的变量跟nacos里面配置的变量,需要符合驼峰命名。这样配置,可以实现自动刷新。
改造代码,应用上面的配置
//@RefreshScope@RestController
public class OrderController {
/* @Value("${order.timeout}")private String timeOut;@Value("${order.auto-confirm}")private String aotuConfirm;*/@AutowiredOrderService orderService;@AutowiredOrderProperties orderProperties;//创建订单@GetMapping("/create")public Order createOrder(@RequestParam("userId")Long userId,@RequestParam("productId")Long productId){Order order = orderService.createOrder(productId,userId);return order;}//获取配置@GetMapping("/getConfig")public String getConfig(){//return "timeout: "+timeOut + "; auto-confirm" +aotuConfirm;return "timeout: "+orderProperties.getTimeOut() + "; auto-confirm" +orderProperties.getAutoConfirm();}}
重启微服务程序,页面输入http://localhost:8000/getConfig回车,看到输出以下内容
nacos配置中修改两个变量,然后发布
发布后,重新在浏览器刷新,返回值已改变
4.Nacos配置监听
使用NacosConfigManager监听配置变化
假如说service-order.properties中有变量变化,立即发邮件
实现步骤:
1.项目启动时,监听配置文件变化
2.发生变化时拿到变化值
3.发送邮件
在启动类里面写。
代码如下:
//项目启动时执行@BeanApplicationRunner applicationRunner(NacosConfigManager nacosConfigManager){return args->{System.out.println("=========");ConfigService configService = nacosConfigManager.getConfigService();configService.addListener("service-order.properties", "DEFAULT_GROUP", new Listener() {@Overridepublic Executor getExecutor() {return Executors.newFixedThreadPool(4);}@Overridepublic void receiveConfigInfo(String configInfo) {System.out.println("变化的信息为:"+configInfo);//模拟邮件发送System.out.println("邮件发送:"+configInfo+"变量发生变化请注意");}});};}
重启微服务,然后修改nacos中的变量
发布变量。查看服务台
可以看到成功监听到了。
5.问题:假如nacos中配置的变量和项目里面的properties文件中的变量重合了,都有值,以哪个为准?
根据上图可以知道,nacos开发的初衷就是便于统一管理变量,而且nacos属于导入的,因此假如nacos和项目本身的配置重合时,优先取nacos中的。而且如果nacos导入的properties有多个,假如配置如下:
spring.config.import=nacos:service-order.properties,nacos:common.properties
如果service-order.properties和common.properties中也有重合的变量,那谁先导入的就是优先使用的,也就是优先使用service-order.properties里面的变量。
6.nacos数据隔离
当微服务运行时,需要区分是生产环境还是测试或者开发环境。因此,需要一个方案能区分运行环境(pro、dev、test)、微服务(order、product)、properties数据集(common.properties、database.properties)。nacos很好的解决了这个问题。
将环境跟命名空间对应,微服务跟group分组对应,配置跟数据集对应,即可解决。
1)创建命名空间
输入dev dev 开发 如下图,确定
然后再创建prod生产和test测试环境。
2)在命名空间中创建properties,其中group对应的是微服务,properties对应数据集
order.timeout=1min
order.auto-confirm=1h
然后发布
然后创建database.properties ,发布
order.db-url=order_dev
此时dev环境已经建好了。
下面使用克隆创建test和prod环境的properties。
克隆好后,进入test命名空间,进行编辑,修改下变量的值,然后发布就可以了。
生产环境也调整下变量值然后发布
上面我们配置好了order的properties,下面我们配置下product的。
配置好发布后,然后再克隆给其他环境
然后修改下变量的值
测试修改为32 生产修改为40 。至此变量配置已完成。
3)在代码中加载变量
1.application.properties文件中的变量废弃
2.创建application.yml文件
输入application.yml
配置文件内容
server:port: 8000
spring:application:name: service-ordercloud:nacos:server-addr: 127.0.0.1:8848config:namespace: devconfig:import:- nacos:common.properties?group=order- nacos:database.properties?group=order
@Component
@ConfigurationProperties(prefix="order")
@Data
public class OrderProperties {String timeOut;String autoConfirm;String dbUrl;
}
@RestController
public class OrderController {
/* @Value("${order.timeout}")private String timeOut;@Value("${order.auto-confirm}")private String aotuConfirm;*/@AutowiredOrderService orderService;@AutowiredOrderProperties orderProperties;//创建订单@GetMapping("/create")public Order createOrder(@RequestParam("userId")Long userId,@RequestParam("productId")Long productId){Order order = orderService.createOrder(productId,userId);return order;}//获取配置@GetMapping("/getConfig")public String getConfig(){//return "timeout: "+timeOut + "; auto-confirm" +aotuConfirm;return "timeout: "+orderProperties.getTimeOut() + "; auto-confirm" +orderProperties.getAutoConfirm()+"; dburl=" +orderProperties.getDbUrl();}}
重启项目,页面输入http://localhost:8000/getConfig
返回成功数值。
修改yml文件中的启动变量为test
重启服务,页面刷新后得到如下结果,变量生效
同理修改为prod也会得到对应结果
但是如上yml配置有问题,如果每个环境加载的properties不一样,这种方式就不行了。做如下修改:
server:port: 8000
spring:profiles:active: prodapplication:name: service-ordercloud:nacos:server-addr: 127.0.0.1:8848config:import-check:enabled: falsenamespace: ${spring.profiles.active:dev}
---
spring:config:import:- nacos:common.properties?group=order- nacos:database.properties?group=orderactivate:on-profile: dev
---
spring:config:import:- nacos:common.properties?group=order- nacos:database.properties?group=order- nacos:haha.properties?group=orderactivate:on-profile: test
---
spring:config:import:- nacos:common.properties?group=order- nacos:database.properties?group=order- nacos:haahaa.properties?group=orderactivate:on-profile: prod
这样每次修改下active的值即可区分不同的环境变量
相关文章:

SpringCloud学习笔记-2
说明:来源于网络,如有侵权请联系我删除 1.提问:如果注册中心宕机,远程调用还能成功吗 答:当微服务发起请求时,会向注册中心请求所有的微服务地址,然后在向指定的微服务地址发起请求。在设计实…...
C++.OpenGL (9/64)复习(Review)
复习(Review) 核心概念快速回顾 #mermaid-svg-MMSQf7gXQlHqiqfM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MMSQf7gXQlHqiqfM .error-icon{fill:#552222;}#mermaid-svg-MMSQf7gXQlHqiqfM .error-text{fill:#…...
Spring Boot-面试题(52)
摘要: 1、通俗易懂,适合小白 2、仅做面试复习用,部分来源网络,博文免费,知识无价,侵权请联系! 1. 什么是 Spring Boot 框架? Spring Boot 是基于 Spring 框架的快速开发框架&#…...

从混乱到秩序:探索管理系统如何彻底改变工作流程
内容摘要 在许多企业与组织中,工作流程混乱是阻碍发展的“绊脚石”。员工们常常被繁琐的步骤、模糊的职责和沟通不畅等问题搞得焦头烂额,工作效率低下,错误频发。而与之形成鲜明对比的是,一些引入了先进管理系统的团队࿰…...

最新研究揭示云端大语言模型防护机制的成效与缺陷
一项全面新研究揭露了主流云端大语言模型(LLM)平台安全机制存在重大漏洞与不一致性,对当前人工智能安全基础设施现状敲响警钟。该研究评估了三大领先生成式AI平台的内容过滤和提示注入防御效果,揭示了安全措施在阻止有害内容生成与…...

HTML5+CSS3+JS小实例:具有粘性重力的磨砂玻璃导航栏
实例:具有粘性重力的磨砂玻璃导航栏 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width…...
CVAT标注服务
CVAT 是一个交互式的视频和图像标注工具,适用于计算机视觉,是一个典型的现代Web应用架构,可以实现大部分情况的标注工作,可以通过serveless CVAT-github cvat文档 下面将就其配置介绍一下几个服务: 1. 核心服务 (C…...
SpringBoot+Mybatisplus配置多数据源(超级简单!!!!)
今天分享配置多数据源的另外一种方式,SpringBoMybatisplus配置多数据源,此种方式配置相对简单,都是苞米豆封装好的,配置容易;此篇分享比较简单的方式配置数据源,多个固定的数据源,通过注解选择使…...
Git Svn
github一般需要科学上网,通过SourceTree通过URL克隆,会提示无效URL或者SLL Timeout之类,如果电脑开启了VPN,在系统设置-网络-DNS查看代理端口,如:127.0.0.1:7890 手动配置git代理 git config --global ht…...

Python爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

Webpack的基本使用 - babel
Mode配置 Mode配置选项可以告知Webpack使用相应模式的内置优化 默认值是production(什么都不设置的情况下) 可选值有:none | development | production; 这几个选项有什么区别呢? 认识source-map 我们的代码通常运行在浏览器…...
LLaMA-Factory的5种推理方式总结
LLaMA-Factory 作为一款开源的大语言模型微调与推理框架,提供了 5 种核心推理方式,覆盖从本地调试到生产部署的全流程需求。以下是具体方式及示例: 1. 交互式命令行推理 适用场景:快速测试模型效果或进行简单对话。 示例命令&am…...

链游技术破壁:NFT资产确权与Play-to-Earn经济模型实战
链游技术破壁:NFT资产确权与Play-to-Earn经济模型实战 ——从「投机泡沫」到「可持续生态」的技术重构 一、NFT确权技术革新:从链上存证到动态赋权 跨链确权架构 全链互操作协议:采用LayerZero协议实现以太坊装备与Solana土地的跨链组合&…...

为什么HDI叠孔比错孔设计难生产
摘要:本文深入探讨了HDI(高密度互连)技术中叠孔与错孔设计在生产难度上的差异。通过对两种设计在对位精度、制程复杂性、可靠性挑战等方面进行详细分析,阐述了叠孔设计在生产过程中面临的一系列难题,旨在为HDI产品的设…...

数据分析实战2(Tableau)
1、Tableau功能 数据赋能(让业务一线也可以轻松使用最新数据) 分析师可以直接将数据看板发布到线上自动更新看板自由下载数据线上修改图表邮箱发送数据设置数据预警 数据探索(通过统计分析和数据可视化,从数据发现问题…...

游戏开发中的CI/CD优化案例:知名游戏公司Gearbox使用TeamCity简化CI/CD流程
案例背景 关于Gearbox: Gearbox 是一家美国电子游戏公司,总部位于德克萨斯州弗里斯科,靠近达拉斯。Gearbox 成立于1999年,推出过多款史上最具代表性的视频游戏,包括《半衰期》、《战火兄弟连》以及《无主之地》。 团队…...

Linux --TCP协议实现简单的网络通信(中英翻译)
一、什么是TCP协议 1.1 、TCP是传输层的协议,TCP需要连接,TCP是一种可靠性传输协议,TCP是面向字节流的传输协议; 二、TCPserver端的搭建 2.1、我们最终好实现的效果是 客户端在任何时候都能连接到服务端,然后向服务…...

LlamaIndex 工作流简介以及基础工作流
什么是工作流? 工作流是一种由事件驱动、基于步骤的应用程序执行流程控制方式。 你的应用程序被划分为多个称为“步骤(Steps)”的部分,这些步骤由“事件(Events)”触发,并且它们自身也会发出事…...

如何利用Elastic Stack(ELK)进行安全日志分析
在以下文章中,我将解释如何使用Elastic Stack(ELK)进行安全日志分析,以提高安全性和监控网络活动。ELK是一个功能强大的开源日志管理和分析平台,由Elasticsearch、Logstash和Kibana组成,适用于各种用例&…...

创客匠人:以 AI 利器赋能创始人 IP 打造,加速知识变现新路径
在知识付费与个人 IP 崛起的时代,创客匠人作为行业领先的技术服务商,正通过 AI 工具重构创始人 IP 打造与知识变现的生态。其推出的三大 AI 利器 ——AI 销售信、免训数字人、AI 智能客服,精准解决 IP 运营中的核心痛点。 以 AI 销售信为例&…...

Opencv中的copyto函数
一.OpenCV中copyto函数详解 copyto()是 OpenCV 中用于图像复制和融合的核心函数,支持灵活的数据复制和掩模(Mask)操作,其功能和使用方法如下: 1. 核心功能 基础复制:将源图像&…...
TeamCity Agent 配置完整教程(配合 Docker Compose 快速部署)
在《使用 Docker Compose 从零部署 TeamCity PostgreSQL(详细新手教程)》中,我们成功部署了 TeamCity Server 和数据库服务。但要真正运行构建任务,还需要至少一个 Build Agent(构建代理)。 本教程将继续…...

基于深度强化学习的Scrapy-Redis分布式爬虫动态调度策略研究
在大数据时代,网络数据的采集与分析变得至关重要,分布式爬虫作为高效获取海量数据的工具,被广泛应用于各类场景。然而,传统的爬虫调度策略在面对复杂多变的网络环境和动态的抓取需求时,往往存在效率低下、资源浪费等问…...

在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven)
在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven) Jenkins 是一款开源的持续集成和持续交付(CI/CD)工具,在 DevOps 实践中有着广泛的应用。本文将手把手带你在 Ubuntu 24.04 LTS 系统中完成 Jenkins 的安装,并配置所需的全局工具:Git、JDK 和 Maven…...
Tika Server:企业级文档内容解析的轻量级服务化方案
目录 Tika Server:企业级文档内容解析的轻量级服务化方案 一、什么是 Tika Server? 二、Tika Server 的功能特点 1. 多种文档格式支持 2. 提取结构化信息 3. RESTful 接口设计 三、是否开源?是否支持私有化部署? 四、部署…...
LMG1020YFFR 电子元器件详解
LMG1020YFFR 电子元器件详解 基本概述 LMG1020YFFR是德州仪器(TI)生产的一款高性能、低侧栅极驱动器,属于其GaN(氮化镓)功率器件驱动产品系列。 主要功能特性 驱动能力: 峰值输出电流:5A/-5A 可驱动GaN FETs、SiC MOSFETs和高速硅MOSFETs…...

防爆型断链保护器的应用场景有哪些?
防爆型断链保护器是一种用于防止链条断裂导致设备损坏或安全事故的装置,尤其适用于存在爆炸风险的工业环境。以下是其主要应用场景: 1.石油化工行业 在石油化工厂、炼油厂等场所,防爆型断链保护器可用于保护输送设备…...
leetcode_206 反转链表
1. 题意 原地反转链表,非常经典的一道题。 2. 解决 2.1 非递归 非递归的比较好理解;链表需要维护前驱和后继两个信息,当我们要更改后继时,先要把原来的后继先存起来。 /*** Definition for singly-linked list.* struct List…...

OPenCV CUDA模块光流------高效地执行光流估计的类BroxOpticalFlow
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::BroxOpticalFlow 是 OpenCV CUDA 模块中实现Brox光流算法的类。该类用于在 GPU 上高效地计算两帧图像之间的稠密光流(Dens…...
高考:如何合理选择学科、专业以及职业
如何合理选择学科、专业以及职业 一、自我认知:明确自身兴趣与优势(一)兴趣探索(二)能力评估(三)价值观与目标 二、外部调研:深入了解学科、专业与职业(一)学…...