配置中心介绍

文章详细介绍了配置中心的概念和作用,以Nacos为例阐述了配置中心的使用,包括命名空间、分组和DataId的数据结构。此外,还讲解了如何通过SpringCloud的Bootstrap配置读取Nacos中的配置。接着,文章提到了RestTemplate的远程调用步骤,以及其在负载均衡中的应用。最后,文章简要提及了web服务器和Linux部署Java项目的相关内容。
摘要由CSDN通过智能技术生成

什么是配置中心

所谓配置中心:在微服务的环境下,将项目需要的配置信息保存在配置中心,需要读取时直接从配置中心读取,方便配置管理的微服务工具

我们可以将部分yml文件的内容保存在配置中心

一个微服务项目有很多子模块,这些子模块可能在不同的服务器上,如果有一些统一的修改,我们要逐一修改这些子模块的配置,由于它们是不同的服务器,所以修改起来很麻烦

如果将这些子模块的配置集中在一个服务器上,我们修改这个服务器的配置信息,就可以修改所有子模块的信息,这个服务器就是配置中心

使用配置中心的原因就是能够达到高效的修改各模块配置的目的

配置中心的使用

Nacos既可以做注册中心,也可以做配置中心

Nacos做配置中心,支持各种格式\类型的配置文件

properties\yaml(yml)\txt\json\xml等

Nacos数据结构

在这里插入图片描述

amespace:命名空间

group:分组

Service/DataId:具体数据

命名空间

namespace是Nacos提供的最大的数据结构

一个Nacos可以创建多个命名空间(namespace)

一个命名空间(namespace)能够包含多个group

每一个group中又可以包含多条配置信息

在nacos中新建命名空间

在这里插入图片描述

在上图连接的位置可以新增命名空间,填写命名空间名称和描述即可

Nacos有默认的命名空间public不能删除和修改

添加命名空间后,我们在Nacos中注册的服务或添加的配置就可以指定命名空间了

因为多个命名空间可以隔离项目,每个项目使用自己的命名空间,互不干扰

在这里插入图片描述
分组

一个命名空间中可以有多个分组,进行进一步分离

我们使用时,如果不需要进一步分组,推荐使用group名称:DEFAULT_GROUP

服务或配置

确定了命名空间和分组之后

我们就可以添加服务或配置了

之前我们启动的各种模块都是服务,这些服务都是默认保存在public命名空间中

下面我们主要使用配置中心的功能,在命名空间中添加配置

添加配置就是设置DataId

实际在Nacos中定位一个配置的结构为

Namespace>Group>DataId

Nacos添加配置

完成cart模块的数据库配置信息添加到nacos的操作

启动nacos(建议使用本地nacos,删除配置列表中所有配置信息,再进行添加)

Nacos首页->配置管理->配置列表->添加配置(右侧的大"+"号)

在这里插入图片描述

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

在这里插入图片描述

我们删除了cart模块原有的连接数据库信息的配置

下面开始,我们尝试连接nacos配置中心,读取数据库配置信息,令cart模块仍然能够正常连接数据库

项目读取配置

csmall-cart-webapi模块要读取连接数据库的配置

如果要读取配置中心的信息,首先要添加依赖

<!--   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>

如果当前我们使用的SpringCloud版本不是2020.x以后的版本

那么上面添加的依赖会有不一样的情况,要想去了解就要查阅相关资料

像其他程序一样,在添加完依赖之后,还需要添加yml文件的配置

借此机会讲解一下SpringCloud项目的配置文件加载顺序

我们学习过的配置文件大体有application.properties和application.yml两种配置文件添加配置

这两个文件如果同时存在,他们的配置都可以同时生效

但是如果两个文件配置有冲突(对同一个属性配置两次)

那么就要看加载顺序了

  • 先加载application.yml
  • 后加载application.properties

如果两个配置文件同时设置了同一个属性,后加载的覆盖掉先加载的

在添加上面的pom文件依赖之后,SpringCloud项目就又多了一组配置文件

它们是bootstrap.yml和bootstrap.properties

这组配置文件是SpringCloud项目才能使用的

它的作用是实际开发时,主要配置系统内容,一般都是不轻易修改的

所以这组配置文件的加载时机,整体早于application这一组

一个SpringCloud项目加载配置文件的顺序最终可能如下图

在这里插入图片描述

因为配置文件的特性,bootstrap这一组是加载系统配置的

所以我们读取配置中心的配置信息,最好添加在bootstrap.yml\properties中

下面我们就在cart-webapi项目中resources文件夹中添加bootstarp.yml文件

接上次课读取配置信息的内容

下面我们就在cart-webapi项目中resources文件夹中添加bootstrap.yml文件

spring:
  cloud:
    nacos:
      config:
        # 设置配置中心的ip和端口
        server-addr: localhost:8848
        # 要确定加载一个配置信息,需要指定namespace,group,dataId
        # 但是默认的namespace就是public
        # 默认的 group就是DEFAULT_GROUP
        # namespace: public
        # group: DEFAULT_GROUP
        # 下面就是配置dataId后缀名
        file-extension: yaml
        # 最关键的就是dataId了,dataId也不指定怎么能获取配置信息呢
        # 从配置中心中读取配置是有默认约定的
        # 会自动读取名为:[当前项目注册到Nacos的名称].[后缀名]的配置文件
        # 结合我们cart模块的情况,就会默认读取nacos-cart.yaml的配置文件
        # 所以我们在配置中心中添加的nacos-cart.yaml就会被读取了

如果一切顺利,那么cart模块是可以通过knife4j测试操作连接数据库的

我们可以新增购物车信息,或删除购物车信息后检查数据库是否有对应操作

因为我们已经删除了本地yml文件中数据库的配置,所以,它能连接操作数据库一定是配置中心生效了!

RestTemplate远程调用

我们现在项目中使用的RPC远程调用技术是Dubbo

实际上除了Dubbo技术之外,还有很多远程调用的方法

它们有些调用的思想都和Dubbo完全不同

Dubbo是SpringCloudAlibaba提供的功能强大的RPC框架

但是Dubbo功能也有限制,如果我们想调用的方法不是我们当前项目的组件或功能,甚至想调用的方法不是java编写的,那么Dubbo就无能为力了

我们可以使用RestTemplate来调用任何语言编写的公开的Rest路径

也就是只要能够使用浏览器访问的路径,我们都可以使用RestTemplate发送请求,接收响应

使用步骤如下

步骤1:

无需添加任何pom依赖和yml文件配置

只需在调用的发起方,也就是使用RestTemplate发起请求的项目配置文件中(指支持@Configuration注解的类或SpringBoot启动类),向Spring容器注入一个该类型对象

所有SpringBoot配置类都可以添加下面代码,我们选择SpringBoot启动类添加如下代码

在CartWebapi启动类中修改

@SpringBootApplication
@EnableDubbo
public class CsmallCartWebapiApplication {

    public static void main(String[] args) {
        SpringApplication.run(CsmallCartWebapiApplication.class, args);
    }

    @Bean
    // LoadBalanced是负载均衡的意思,效果是
    // 如果被调用的目标是一个集群,会负载均衡的访问集群中的服务器
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

步骤2:

RestTemplate是一个能够发送请求到指定url路径的工具

我们项目中有若干控制器方法,都可以作为它调用的目标

我们可以实现在cart模块运行删除购物车商品的同时减少库存

这样就要求我们stock模块具备一个能够减少库存的控制器方法,

现在这个方法是有的,url为:/base/stock/reduce/count

但是RestTemplate调用时请求以get方法居多,post方法调用代码比较繁琐,所以将现在stock模块减少库存的方法由之前的@PostMapping修改为@GetMapping

@GetMapping("/reduce/count")

步骤3:

回到cart-webapi模块

开始调用

我们可以在当前CartController控制器方法deleteUserCart中

添加RestTemplate的调用,实现库存的减少

// 装配远程调用需要的RestTemplate对象
@Autowired
private RestTemplate restTemplate;
@PostMapping("/delete")
@ApiOperation("删除购物车中的商品信息")
@ApiImplicitParams({
        @ApiImplicitParam(value = "用户Id",name="userId",example = "UU100"),
        @ApiImplicitParam(value = "商品编号",name="commodityCode",example = "PC100")
})
public JsonResult deleteUserCart(String userId,String commodityCode){
    cartService.deleteUserCart(userId,commodityCode);
    // 上面删除了购物车商品,下面开始调用减少库存
    // 学习套路:发起RestTemplate远程调用前,先声明要请求的url路径
    String url="http://localhost:20003/base/stock/reduce/count?" +
            "commodityCode={1}&reduceCount={2}";
    // url确定之后才能发起调用
    // 参数解释:
    // 第一个参数:请求的url
    // 第二个参数:返回值类型的反射,方法的返回值会转换为这个类型
    // 第三个参数开始: 如果url中有{1},{2}这样的占位符的话
    //           第三个参数赋值给{1},第四个参数赋值给{2},以此类推
    JsonResult jsonResult=restTemplate.getForObject(
            url,JsonResult.class,commodityCode,5);
    System.out.println(jsonResult);
    return JsonResult.ok("删除购物车商品完成!");
}

步骤4:

发送测试

将相关的模块都启动

Nacos\Seata

cart\stock

调用cart模块删除购物车中的方法

运行后检查对应商品减少库存和购物车中数据的删除效果

如果一切正常证明调用成功了

什么是web服务器

https://editor.csdn.net/md?not_checkout=1&articleId=130812919

RestTemplate远程调用

https://editor.csdn.net/md?not_checkout=1&articleId=130812935

Nginx

https://editor.csdn.net/md?not_checkout=1&articleId=130812955

Linux部署java项目

https://editor.csdn.net/md?not_checkout=1&articleId=130813287

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值