持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
01、Spring Cloud介绍与环境搭建
一、微服务概念:
微服务是种架构风格,将单体 应用划分为小型的服务单元,微服务之间使用 HTTP 的API 进行资源访问与操作 在对单体应用的划分上,微服务与前面的 SOA 架构有点类似,但是 SOA 架构侧重于将每个单体应用的服务集成到 ESB 上,而微服务做得更加彻底,强调将整个模块变成服务组件,微服务对模块的划分粒度可能会更细。以我们前面的销售、会员模块为例,在 SOA 架构中,只需将相应的服务发布到 ESB 容器就可以了,而在微服务架构中,这两个模块本身,将会变一个或多个服务组件。SOA 架构与微服务架构,请参见图 1-5 与图 1-6
二、Spring Cloud主要模块:
Spring Cloud 并不是一个具体的框架,大家可以把它理解为一个工具箱,它提供的各类工具,可以帮助我们快速构建分布式系统。 Spring loud 的各个项目基于Spring Boot,将Netflix的多个框架进行封装,并且通过自动配置的方式将这些框架绑定到Spring 的环境中, 从而简化了这些框架的使用。由Spring Boot的简便,使得我们在使用Spring Cloud时,很容易将Netflix各个框架整合进项目中。
Spring Cloud下的Spring Cloud Netflix模块,主要封装了Netflix的以下项目。
- Eureka:基于阻REST服务的分布式中间件,主要用于服务管理。
- Hystrix:容错框架,通过添加延迟阑值以及容错的逻辑,帮助我们控制分布式系统间组件的交互。
- Feign REST客户端,目的是为了简化Web Service客户端的开发。
- Ribbon:负载均衡框架,在微服务集群中为各个客户端的通信提供支持,它主要实现中间层应用程序的负载均衡
- Zuul:为微服务集群提供代理、过滤、路由等功能。
Spring Cloud 的主要模块,除了Spring Cloud Netflix模块外,Spring Cloud 还包括以下几个重要的模块
- Spring Cloud Config:为分布式系统提供了配置服务器和配置客户端,通过对它们 的配置,可以很好地管理集群中的配置文件。
- Spring Cloud Sleuth:服务跟踪框架,可以Zipkin Apache HTrace ELK等数据分析、服务跟踪系统进行整合,为服务跟踪、解决问题提供了便利。
- Spring Cloud Stream:用于构建消息驱动微服务的框架,该框架在Spring Boot的基础上,整合了Spring Integration来连接消息代理中间件。
- Spring Cloud Bus:连接 RabbitMQ Kafka 等消息代理的集群消息总线
三、SpringBoot Profiles配置文件:
使用Spring Boot的Profile可以实现多场景下的配置切换,方便开发中进行测试和部署生产环境。 下面就大致介绍一下yml配置文件跟properties配置文件怎么使用profile配置不同环境的配置文件。
1、使用properties文件(推荐)
如果使用application.properties进行多个环境的配置,原理跟使用多个yml配置文件一致,创建application-{profile}.properties文件 存放不同环境特有的配置, 将于环境无关的属性放置到application.properties文件里面,并在application.properties文件中通过spring.profiles.active=xxx 指定加载不同环境的配置。 如果不指定,则默认加载application.properties的配置,不会加载带有profile的配置。 示例如下:如果需要指定多个配置文件,中间用逗号分隔,例如:
spring.profiles.active=pro,test
#激活方式也可通过program arguments启动参数指定 --spring.profiles.active=slave1,slave2
spring.profiles.active=slave1
#配置应用名称
spring.application.name=eureka-server
#剔除失效节点 -- 注册表的清理间隔
eureka.server.eviction-interval-timer-in-ms=6000
#是否启用自我保护,不启用 自我保护
eureka.server.enable-self-preservation=false
2、使用yml文件
2.1单个yml配置文件
首先,我们先创建一个名为 application.yml的属性文件,如下:
~~server:
port: 8080
my:
name: demo
spring:
profiles:
active: dev
---
#development environment
spring:
profiles: dev
server:
port: 8160
my:
name: ricky
---
#test environment
spring:
profiles: test
server:
port: 8180
my:
name: test
---
#production environment
spring:
profiles: prod
server:
port: 8190
my:
name: prod
~~
application.yml文件分为四部分,使用 --- 来作为分隔符,第一部分通用配置部分,表示三个环境都通用的属性, 后面三段分别为:开发,测试,生产,用spring.profiles指定了一个值(开发为dev,测试为test,生产为prod),这个值表示该段配置应该用在哪个profile里面。
如果我们是本地启动,在通用配置里面可以设置调用哪个环境的profil,也就是第一段的spring.profiles.active=XXX, 其中XXX是后面3段中spring.profiles对应的,通过这个就可以控制本地启动调用哪个环境的配置文件,例如:
注意:如果spring.profiles.active没有指定值,那么只会使用没有指定spring.profiles文件的值,也就是只会加载通用的配置。
启动参数 如果是部署到服务器的话,我们正常打成jar包,启动时通过 --spring.profiles.active=xxx 来控制加载哪个环境的配置,完整命令如下:
java -jar xxx.jar --spring.profiles.active=test 表示使用测试环境的配置
java -jar xxx.jar --spring.profiles.active=prod 表示使用生产环境的配置
2.2 多个yml配置文件进行配置属性文件
我们也可以使用多个yml来配置属性,将于环境无关的属性放置到application.yml文件里面;通过与配置文件相同的命名规范,创建application-{profile}.yml文件 存放不同环境特有的配置, 例如 application-test.yml 存放测试环境特有的配置属性,application-prod.yml 存放生产环境特有的配置属性。
通过这种形式来配置多个环境的属性文件,在application.yml文件里面spring.profiles.active=xxx来指定加载不同环境的配置,如果不指定,则默认只使用application.yml属性文件,不会加载其他的profiles的配置。
SpringBoot配置文件加载顺序:
常用的:(后三个都是项目的resources目录下) 命令行参数 > resources/bootstrap.properties > resources/application.properties > resources/application.yml