加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

如何使用Spring Cloud构建微服务架构?

发布时间:2018-08-14 11:45:32 所属栏目:教程 来源:张逸
导读:【资讯】微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。 但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。 在 Java 生态圈,目前使用较多的微服务框架就是集成了包括 Netflix OSS

  @EnableZuulProxy @SpringCloudApplication public class ZuulApplication { public static void main(String[] args) { new SpringApplicatonBuilder(ZuulApplication.class).web(true).run(args); } @Bean public AccessFilter accessFilter() { return new AccessFilter(); } }

  Zuul 一共提供了四种过滤器:

  pre filter

  routing filter

  post filter

  error filter

  下图来自官网,它展现了客户端请求到达 Zuul API 网关的生命周期与过滤过程:

  如何使用Spring Cloud构建微服务架构?

  通过 starter 添加 Zuul 的依赖时,自身包含了 spring-cloud-starter-hystrix 与 spring-cloud-starter-ribbon 模块的依赖,因此 Zuul 自身就拥有线程隔离与断路器的服务容错功能,以及客户端负载均衡。

  但是,倘若我们使用 path 与 url 的映射关系来配置路由规则,则路由转发的请求并不会采用 HystrixCommand 来包装,因而这类路由是没有服务容错与客户端负载均衡作用的。

  所以在使用 Zuul 时,应尽量使用 path 和 serviceId 的组合对路由进行配置。

  分布式配置中心

  为什么要引入一个分布式配置中心?一个微服务就需要至少一个配置文件,怎么管理分散在各个微服务中的配置文件呢?如果微服务采用的是不同的技术栈,如何来统一微服务的配置呢?

  微服务是部署在不同的节点中,显然我们无法在单机中实现对分布式节点的配置管理。这就是引入 Spring Cloud Config 的目的。

  Spring Cloud Config 提供了服务端和客户端支持。服务端是一个独立的微服务,同样可以注册到 Eureka 服务器中。

  每个需要使用分布式配置中心的微服务都是 Spring Cloud Config 的客户端。

  Spring Cloud Config 默认实现基于 Git 仓库,既可以进行版本管理,还可以通过本地 Git 库起到缓存作用。

  Spring Cloud Config 不限于基于 Spring Cloud 开发的系统,而是可以用于任何语言开发的程序,并支持自定义实现。

  配置中心服务端

  Spring Cloud Config Server 作为配置中心服务端,提供如下功能:

  拉取配置时更新 Git 仓库副本,保证是最新结果。

  支持数据结构丰富,yml,json,properties 等。

  配合 Eureke 可实现服务发现,配合 cloud bus 可实现配置推送更新。

  配置存储基于 Git 仓库,可进行版本管理。

  简单可靠,有丰富的配套方案。

  建立一个 Config 服务,需要添加如下依赖:

  <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>

  服务的 Application 类需要添加 @EnableConfigServer 注解:

  @SpringBootApplication @EnableConfigServer public class ConfigApplication { public static void main(String[] args) { SpringApplication.run(ConfigApplication.class, args); } }

  配置服务的基本信息和 Git 仓库的信息放在 application.yml 文件中:

  spring: cloud: config: server: git: uri: http://localhost/workspace/springcloud-demo username: user password: password server: port: 8888 security: user: password: ${CONFIG_SERVICE_PASSWORD}

  Git 库与配置服务

  在 Config 服务中配置了 Git 服务器以及 Git 库的信息后,我们就可以在 Git 库中提交配置文件。

  存储在Git 库中配置文件的名字以及分支名(默认为 master 分支)会组成访问 Config 服务的 URI。

  假设有一个服务为 Notification 服务,则它在配置中心服务端的配置文件为 notification-dev.yml,内容如下:

  devMode: true spring: application: name: notification jdbc: host: localhost port: 3306 user: root password: 123456 logging: file: demo

  配置中心客户端

  需要读取配置中心服务端信息的微服务都是配置中心的客户端,为了能够读取配置服务端的信息,这些微服务需要:

  在 pom 中添加对 spring-cloud-starter-config 的依赖。

  在 bootstrap.properties 或者 bootstrap.yml 中配置获取配置的 config-server 位置。

  例如,Account 服务的配置是由 Spring Cloud Config 进行管理的。在它的资源目录下,提供了 bootstrap.yml 配置文件,内容如下所示:

  spring: application: name: account-service cloud: config: uri: http://config:8888 fail-fast: true password: ${CONFIG_SERVICE_PASSWORD} username: user

  注意,该配置文件除了配置了该 Account 服务应用的 name 之外,主要是支持该应用获得配置服务端的信息。

  微服务自身的配置信息则统一放到配置中心服务端的文件中,并由 Git 库进行管理。

  例如,Account 服务的详细配置在配置中心服务端的 account-dev.yml 文件中:

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读