5-18 Nacos配置中心 | RestTemplate
配置中心
什么是配置中心
所谓配置中心:将项目需要的配置信息保存在配置中心,需要读取时直接从配置中心读取,方便配置管理的微服务工具
我们可以将部分yml文件的内容保存在配置中心
一个微服务项目有很多子模块,这些子模块可能在不同的服务器上,如果有一些统一的修改,我们要逐一修改这些子模块的配置,由于它们是不同的服务器,所以修改起来很麻烦
如果将这些子模块的配置集中在一个服务器上,我们修改这个服务器的配置信息,就相当于修改了所有子模块的信息,这个服务器就是配置中心
使用配置中心的原因就是能够达到高效的修改各模块配置的目的
配置中心的使用
Nacos既可以做注册中心,也可以做配置中心
Nacos做配置中心,支持各种格式\类型的配置文件
properties\yaml(yml)\txt\json\xml等
Nacos数据结构

namespace:命名空间
group:分组
Service/DataId:具体数据
命名空间
namespace是Nacos提供的最大的数据结构
一个Nacos可以创建多个命名空间
一个命名空间能够包含多个group
在nacos中创建命名空间

在上图连接的位置可以新增命名空间,填写命名空间名称和描述即可
Nacos有默认的命名空间public不能删除和修改
添加命名空间后,我们在Nacos中注册的服务或添加的配置就可以指定命名空间了
因为多个命名空间可以隔离项目,每个项目使用自己的命名空间,互不干扰

分组
一个命名空间中可以有多个分组,进行进一步分离
我们使用时,如果不需要进一步分组,推荐使用group名称:DEFAULF_GROUP
服务或配置
确定了命名空间和分组之后
我们就可以添加服务或配置了
之前我们启动的各种模块都是服务,之前都是默认保存在public命名空间中
下面我们主要使用配置中心的功能,在命名空间中添加配置
添加配置就是设置DataId
实际在Nacos中定位一个配置的结构为
Namespace>Group>DataId
Nacos添加配置
Nacos首页->配置管理->配置列表->添加配置(右侧的大"+"号)

添加cart模块数据库连接配置

点击发布,nacos就保存这个配置了
项目读取配置
如果要读取配置中心的信心,首先要添加依赖
<!-- 配置中心的依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 支持SpringCloud加载系统配置文件的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
像其他程序一样,在添加完依赖之后,还需要添加yml文件的配置
我们使用过application.properties和application.yml两种配置文件添加配置
实际上这两个配置文件加载是有顺序的
先加载yml
后加载properties
如果两个配置文件同时设置了同一个属性,后加载的覆盖掉先加载的
在SpringCloud环境下,实际上可以再多出一组配置文件
它们是bootstarp.yml和bootstarp.properties
这一组的加载时机整体早于application这一组
所以一个SpringCloud项目加载配置文件的顺序最终可能如下图
bootstrap这组配置文件,一般用于配置加载一些系统级别的配置,这些配置的特征是一般不会轻易修改
我们再后面的学习过程中,会将配置中心的信息,加载到这组配置文件中
必须是SpringCloud项目,才能支持bootstrap这组配置文件的加载
支持这组配置的依赖就是上面我们添加的依赖
<!-- 支持SpringCloud加载系统配置文件的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
注意SpringCloud版本早于2020之前,添加的不是这个依赖,可以自行查询
下面我们就在cart-webapi项目中resources文件夹中添加bootstarp.yml文件
spring:
cloud:
nacos:
config:
# 指定配置中心的位置
server-addr: 192.168.137.150:8848
# 指定配置文件所在的组名(命名空间默认public不需要指定)
group: DEFAULT_GROUP
# 设置配置文件的后缀名
# 默认情况下会加载[服务器名].[后缀名]为DataId的配置
# 当前项目名称为nacos-cart所以默认加载的DataId为:nacos-cart.yaml
file-extension: yaml
如果一切顺利,那么cart模块是可以通过knife4j测试操作连接数据库的
我们可以新增购物车信息,或删除购物车信息后简单数据库是否有对应操作
因为我们已经删除了本地yml文件中数据库的配置,所以,它能连接操作数据库一定是配置中心生效了!
使用RestTemplate调用远程控制层方法
我们现在项目中使用的RPC远程调用技术是Dubbo
实际上除了Dubbo技术之外,还有很多远程调用的方法
它们有些调用的思想都和Dubbo完全不同
Dubbo是SpringCloudAlibaba提供的功能强大的RPC框架
但是Dubbo功能也有限制,如果我们想调用的方法不是我们当前项目的组件或功能,甚至想调用的方法不是java编写的,那么Dubbo就无能为力了
我们可以使用RestTemplate来调用任何语言编写的公开的控制器路径
也就是只要能够使用浏览器访问的路径,我们都可以使用RestTemplate发送请求,接收响应
使用步骤如下
步骤1:
先在调用的发起方,也就是使用RestTemplate发起请求的项目配置文件中,向Spring容器注入一个该类型对象
的类型,SpringBoot配置类都可以添加下面代码,我们选择SpringBoot启动类添加如下代码
@Bean
// 负载均衡的注解,编写之后采用负载均衡算法
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
步骤2:
我们要确定要调用的控制器方法,这个方法必须是GetMapping
我们修改CartController中删除购物车的方法为@GetMapping 为了测试
我们本地stock模块减少库存的方法中使用RestTemplate调用删除购物车商品的方法
在StockController类中编写代码如下
@Autowired
private RestTemplate restTemplate;
//.....
public JsonResult reduceCommodityCount(StockReduceCountDTO stockReduceCountDTO){
// 这里发送RestTemplate请求
// 调用cart模块的删除购物车的方法
// 先确定要调用的路径
String url="http://localhost:20001/base/cart/delete" +
"?userId={1}&commodityCode={2}";
// 再发起调用
// getForObject参数1请求的路径 参数2返回类型的反射
// 从参数3开始是url中{1} 占位符的值 参数4是{2}的值 以此类推
JsonResult jsonResult=restTemplate.getForObject(url,JsonResult.class,
"UU100",
stockReduceCountDTO.getCommodityCode());
System.out.println(jsonResult);
stockService.reduceCommodityCount(stockReduceCountDTO);
return JsonResult.ok("商品库存减少完成!");
}
步骤3:
发送测试
将相关的模块都启动
cart\stock
调用stock模块减少库存的方法
运行后检查购物车中减少库存的商品是否会被删除
如果删除了证明调用成功了
5-18 Nacos配置中心 | RestTemplate的更多相关文章
- Nacos配置中心和服务的注册发现
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用.Nacos既可以做配置中心,也可以做注册中心.我们先来看看在项目中如何使用Nacos做配置中心. Nac ...
- Spring Cloud Alibaba(5)---Nacos(配置中心)
Nacos(配置中心) 有关Spring Cloud Alibaba之前写过四篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring C ...
- SpringBoot使用Nacos配置中心
本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心. 1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计.它可以帮助您轻松构建云 ...
- Nacos配置中心
本文介绍spring cloud 集成 nacos案例 官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html](https://nacos.io/zh ...
- Spring Cloud 系列之 Alibaba Nacos 配置中心
Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...
- Nacos配置中心使用
在系统开发过程中,开发者通常会将一些需要变更的参数.变量等从代码中分离出来独立管理,以独立的配置文件的形式存在.目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进 ...
- 微服务从nacos配置中心获得配置信息
一,安装nacos, 略 二,创建父工程和微服务工程 service1, service2,以idea为例 1, new -> project -> Maven -> 填写group ...
- Spring Cloud Config、Apollo、Nacos配置中心选型及对比
Spring Cloud Config.Apollo.Nacos配置中心选型及对比 1.Nacos 1.1 Nacos主要提供以下四大功能 2.Spring Cloud Config 3.Apollo ...
- 【Nacos】Springboot整合Nacos配置中心(二) 多环境配置
本篇随笔接上一篇文章:Springboot整合Nacos配置中心(一),主要记录Nacos多环境的配置的方法 Nacos多环境的配置 方法一: 1.在项目中的bootstrap.yaml文件中配置激活 ...
随机推荐
- FreeRTOS --(2)内存管理 heap1
转载自https://blog.csdn.net/zhoutaopower/article/details/106631237 FreeRTOS 提供了5种内存堆管理方案,分别对应heap1/heap ...
- 关于BenchMark/c++11计时器/Chrome:tracing 的一些笔记
A benchmark is a test of the performance of a computer system. 基准测试是对计算机系统的性能的测试 计时器 性能的指标就是时间,在c+ ...
- clion 预编译文件的查看
看了一圈网上也没有我能一下就能看的懂的配置教程 我就手打一篇给在用clion的同学来参考一下 本文适用于g++编译 cmake Ninja生成器 clion 默认使用的是CMAKE来构建程序 生成器用 ...
- 1.2 Linux是什么,有哪些特点?
与大家熟知的 Windows 操作系统软件一样,Linux 也是一个操作系统软件,其 logo 是一只企鹅(如图 1 所示).与 Windows 不同之处在于,Linux 是一套开放源代码程序的.可以 ...
- 20220303模拟赛题解and总结
目录 总结 A.不幸的7 B.选举 C. 差的绝对值之和 D. 路径通过 总结 初一第一 一般,最后一题没打好 不难发现,教练出水了,可能是信心赛 A.不幸的7 暴力,没有逻辑可言 #include& ...
- python写一个能变身电光耗子的贪吃蛇
python写一个不同的贪吃蛇 写这篇文章是因为最近课太多,没有精力去挖洞,记录一下学习中的收获,python那么好玩就写一个大一没有完成的贪吃蛇(主要还是跟课程有关o(╥﹏╥)o,课太多好烦) 第一 ...
- 基于STM32+华为云IOT设计智能称重系统
摘要:选择部署多个重量传感器和必要的算法.通过WiFi 通信模块.GPS定位模块,采集车辆称重数据一地理位置信息,并通过网络发送至云平台,设计图形化UI界面展示称重.地图位置等重要信息,实现对称重系统 ...
- linux下三种服务开机自启的方式
方式一.二.三适用于ubuntu,centos推荐使用方式二.方式三 方式一 在ubuntu系统中,如果你使用的apt方式安装的软件,可以使用如下方式直接添加服务的开机自启, 如果你是手动解压缩官网下 ...
- C#实现找二维数组中的鞍点
鞍点定义:该位置上的元素值在行中最大,在该列上最小 代码示例: using System; using System.Collections.Generic; using System.Linq; u ...
- dd-文件系统内容映射
复制文件并对原文件的内容进行转换和格式化处理. 语法 dd [OPTIONS]... 选项 if=filename 指定源文件. of=filename 指定目的文件. ibs=bytes 指定一个块 ...