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

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

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

  【资讯】微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。

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

  但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。

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

  在 Java 生态圈,目前使用较多的微服务框架就是集成了包括 Netflix OSS 以及 Spring Cloud。

  它包括:

  Spring Cloud Config:配置管理工具,支持使用 Git 存储配置内容,可以实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等。

  Spring Cloud Netflix:对 Netflix OSS 进行了整合。

  其中又包括:

  Eureka:服务治理组件,包含服务注册中心、服务注册与发现。

  Hystrix:容器管理组件,实现断路器模式,倘若依赖的服务出现延迟或故障,则提供强大的容错功能。

  Ribbon:客户端负载均衡的服务调用组件。

  Feign:基于 Ribbon 和 Hystrix 的声明式服务调用组件。

  Zuul:网关组件,提供智能路由、访问过滤等功能。

  Archaius:外部化配置组件。

  Spring Cloud Bus:事件、消息总线。

  Spring Cloud Cluster:针对 ZooKeeper、Redis、Hazelcast、Consul 的选举算法和通用状态模式的实现。

  Spring Cloud Cloudfoundry:与 Pivotal Cloudfoundry 的整合支持。

  Spring Cloud Consul:服务发现与配置管理工具。

  Spring Cloud Stream:通过 Redis、Rabbit 或者 Kafka 实现的消息驱动的微服务。

  Spring Cloud AWS:简化和整合 Amazon Web Service。

  Spring Cloud Security:安全工具包,提供 Zuul 代理中对 OAuth2 客户端请求的中继器。

  Spring Cloud Sleuth:Spring Cloud 应用的分布式跟踪实现,可以整合 Zipkin。

  Spring Cloud ZooKeeper:基于 ZooKeeper 的服务发现与配置管理组件。

  Spring Cloud Starters:Spring Cloud 的基础组件,是基于 Spring Boot 风格项目的基础依赖模块。

  Spring Cloud CLI:用于在 Groovy 中快速创建 Spring Cloud 应用的 Spring Boot CLI 插件。

  服务治理

  当一个系统的微服务数量越来越多的时候,我们就需要对服务进行治理,提供统一的服务注册中心,然后在其框架下提供发现服务的功能。

  这样就避免了对多个微服务的配置,以及微服务之间以及与客户端之间的耦合。

  Spring Cloud Eureka 是对 Netflix Eureka 的包装,用以实现服务注册与发现。

  Eureka 服务端即服务注册中心,支持高可用配置。它依托强一致性提供良好的服务实例可用性,并支持集群模式部署。

  Eureka 客户端则负责处理服务的注册与发现。客户端服务通过 annotation 与参数配置的方式,嵌入在客户端应用程序代码中。

  在运行应用程序时,Eureka 客户端向注册中心注册自身提供的服务,并周期性地发送心跳更新它的服务租约。

  搭建服务注册中心

  服务注册中心是一个独立部署的服务(你可以认为它也是一个微服务),所以需要单独为它创建一个项目,并在 pom.xml 中添加 Eureka 的依赖:

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

  创建 Spring Boot Application:

  @EnableEurekaServer @SpringBootApplication public class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } }

  注册服务提供者

  要让自己编写的微服务能够注册到 Eureka 服务器中,需要在服务的 Spring Boot Application 中添加 @EnableDiscoveryClient 注解,如此才能让 Eureka 服务器发现该服务。

  当然,pom.xml 文件中也需要添加相关依赖:

  <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>

  同时,我们还需要为服务命名,并指定地址。这些信息都可以在 application.properties 配置文件中配置:

  spring.application.name=demo-service eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

  说明:Spring 更推荐使用 yml 文件来维护系统的配置,yml 文件可以体现出配置节的层次关系,表现力比单纯的 key-value 形式更好。

  如果结合使用后面讲到的 Spring Cloud Config,则客户端的配置文件必须命名为 bootstrap.properties 或者 bootstrap.yml。

  与上述配置相同的 yml 文件配置为:

  spring: application: name: demo-service eureka: client: serviceUrl: defaultZone: http://localhost:1111/eureka/

  服务发现与消费

  在微服务架构下,许多微服务可能会扮演双重身份:

  一方面它是服务的提供者

  另一方面它又可能是服务的消费者

  注册在 Eureka Server 中的微服务可能会被别的服务消费。此时,就相当于在服务中创建另一个服务的客户端,并通过 RestTemplate 发起对服务的调用。

  为了更好地提高性能,可以在服务的客户端引入 Ribbon,作为客户端负载均衡。

  现在假定我们要为 demo-service 创建一个服务消费者 demo-consumer。该消费者自身也是一个 Spring Boot 微服务,同时也能够被 Eureka 服务器注册。

  这时,就需要在该服务的 pom.xml 中添加 Eureka 与 Ribbon 的依赖:

  <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency>

  然后在主应用类 ConosumerApplication 中注入 RestTemplate,并引入 @LoadBalanced 注解开启客户端负载均衡:

(编辑:拼字网 - 核心网)

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