SpringCloud

一、单体架构和分布式架构的区别

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。

优点:架构简单、部署成本低

缺点:耦合度高(维护困难、升级困难)

例如下面的huike_spring项目就是一个典型的单体架构,将huike-business(商机模块)huike-clues(线索模块)huike-contract(合同)等功能模块都集中在一个项目中开发。

这样的单体架构项目耦合度高,像huike_spring一样,把所有的功能模块都塞在一个服务里面。如果项目比较大的情况下,编译和打包可能都需要十几分钟,并且改动自己一处的代码都可能影响到别人的代码,具体的访问模式如下图。

二、分布式架构

 分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。例如可以把上图中商城项目中的每个模块分别拆分成支付服务商品服务订单服务用户服务

三、微服务 

3.1、微服务的概念

        分布式架构的最终目的就是让项目之间低耦合,不会让项目与项目之间产生过多的影响。微服务就是分布式架构的其中一种方案。每个微服务都有自己独立的数据库,每个微服务之间低耦合,可以使用自己各自擅长的技术。微服务之间产生的耦合就存在于微服务之间的调用,我们称为远程调用

3.2、微服务的技术选型

        市面上比较常用的实现微服务的两种框架:SpringCloudDubbo

        

其中Dubbo的注册中心是rediszookeeper,这两类并不是专门做注册中心的,并且服务的远程调用采用的是Dubbo协议,而不是常见的http协议,所以这样又增加了学习成本。因此市面上常用的是SpringCloud以及SpringCloudAlibaba

3.3、企业中常见的技术选型

以下是企业中常见的技术选型,需要注意的是由3.2中的图我们可以知道SpringCloudAlibaba在服务调用是支持Dubbo协议的,所以SpringCloud可以Dubbo联合使用。

3.4、微服务的特征

单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责

自治:团队独立、技术独立、数据独立,独立部署和交付

面向服务:服务提供统一标准的接口,与语言和技术无关

隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

        微服务的最终目的是为了实现各个模块之间的低耦合,每个模块之间互不影响,各自开发各自的功能模块。

下图是微服务的访问方式:每个微服务还有自己独立的数据库,不能直接访问别的微服务的数据库。

四、nacos的使用 

 4.1、创建两个微服务

我们分别创建两个微服务,分别为UserServiceOrderService,并且他们都有自己独立的数据。

4.2、微服务中引入nacos

        在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖 

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

注意<dependencyManagement>标签里面并不是强制要求子模块下载这个依赖,而是确定版本号,子模块需要这个依赖,还是需要再模块中引入这个依赖。

        所以在user-serviceorder-service中的pom文件中引入nacos-discovery依赖

  

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

接下来在user-serviceorder-serviceapplication.yml添加nacos地址

spring:
  cloud:
    nacos:
      server-addr: localhost:8848

重启两个服务后,在nacos的注册中心页面中就能看见两个服务

所以在SpringCloud中使用nacos只有两步:

1、在pom.xml文件中添加nacos的依赖

2、在对应的yml配置文件中添加nacos的地址

4.3、环境隔离

命名空间页面点击右上角的新增命名空间

新增一个dev命名空间

 这样就能在服务管理配置管理页面新增一个dev命名空间

可以看见服务管理页面中的dev命名空间看不见任何的微服务,那是因为不同namespace之间相互隔离不同namespace的服务互相不可见,而我刚才是把微服务注册到了public的命名空间中,在dev命名空间是看不见的。

4.4、nacos配置中心的作用

首先需要在pom.xml中引入相关的依赖

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
4.4.1 在nacos的配置列表页面添加Data Iduserservice-dev.yaml的配置文件

 4.4.2、使用bootstrap.yaml配置文件读取nacos中的配置

        首先在user-service服务中添加bootstrap.yaml配置文件,在bootstrap.yaml配置文件中设置读取nacos中配置信息的设置。

bootstrap.yaml配置文件的优先级高于application.yml配置文件的优先级,所以当项目启动的时候1、首先会加载bootstrap.yaml配置文件的信息。

2、通过bootstrap.yaml配置文件中的信息再去加载nacos中userservice-dev.yaml中的配置信息

3、最后再读取本地的application.yml中配置文件的信息

  

4.4.3、 bootstrap.yaml配置文件读取的规则

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,和nacos配置中心里面的Data Id相对应。本例中,就是去读取userservice-dev.yaml中的内容。

        

        需要注意的是,微服务注册到nacos中的名字是由Spring.cloud.nacos.discovery.service决定的,不是由Spring.application.name决定的,Spring.application.name只是为了拉取nacos中相对应的Data Id中的配置

4.4.4、在微服务中拉取nacos配置的步骤

1、引入相关的依赖

2、在nacos的配置列表中设置相关配置

3、微服务中添加bootstrap.yaml配置文件

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud是一个用于构建分布式系统的开发工具集合。它提供了一些常用的组件和框架,包括服务注册和发现、负载均衡、断路器、分布式配置等等。在使用Spring Cloud时,有一些常见的错误和注意事项需要注意。 首先,关于Spring Boot和Spring Cloud版本对应错误。在使用Spring Cloud时,需要确保Spring Boot和Spring Cloud的版本兼容。不同版本之间可能存在依赖冲突或不兼容的情况,因此需要根据官方文档或者相关文档来选择合适的版本。 另外,Spring Cloud Config是一个用于集中管理和动态获取配置的工具。它支持从Git、SVN或本地文件系统中获取配置文件,并提供了服务器和客户端支持。你可以通过官方使用说明文档了解更多关于Spring Cloud Config的详细信息。 此外,关于选择使用Nacos还是Eureka作为服务注册和发现组件的问题。Nacos是一个功能更强大的服务注册和发现组件,它整合了Spring Cloud Eureka、Spring Cloud Config和Spring Cloud Bus的功能。使用Nacos可以实现配置的中心动态刷新,而不需要为配置中心新增集群或使用消息队列。另一方面,Eureka是Spring Cloud原生全家桶的一部分,相对来说更加稳定一些。选择使用哪个组件需要根据具体的需求和项目特点来决定。 综上所述,Spring Cloud是一个用于构建分布式系统的开发工具集合,它提供了一些常用的组件和框架。在使用Spring Cloud时,需要注意Spring Boot和Spring Cloud版本的兼容性,并可以使用Spring Cloud Config来动态获取配置。同时,可以选择使用Nacos或Eureka作为服务注册和发现组件,具体选择需要根据项目需求来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值