本篇主要介绍的是SpringCloud相关知识、微服务架构以及搭建一个高可用的服务注册与发现的服务模块(Eureka)。
SpringCloud介绍Spring Cloud是在Spring Boot的基础上构建的,用于简化分布式系统构建的工具集,为开发人员提供快速建立分布式系统中的一些常见的模式。
例如:
配置管理(configuration management),服务发现(service
discovery),断路器(circuit breakers),智能路由( intelligent routing),微代理(micro-proxy),控制总线(control bus),一次性令牌( one-time okens),全局锁(global locks),领导选举(leadership election),分布式会话(distributed sessions),集群状态(cluster state)等等。
微服务架构风格是一种将单个应用程序开发为一套小型服务的方法,每个小型服务都在自己的流程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务围绕业务功能构建,可通过全自动部署机制独立部署。这些服务至少集中管理,可以用不同的编程语言编写,并使用不同的数据存储技术。
SpringCloud Eureka Eureka 介绍Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是springcloud体系中最重要最核心的组件之一。
Eureka主要由两个组件组成:Eureka服务器和Eureka客户端。
Eureka服务器用作服务注册服务器。
Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。
开发环境
JDK:1.8
SpringBoot:2.1.1.RELEASE
SpringCloud:Finchley
注:不一定非要用上述的版本,可以根据情况进行相应的调整。需要注意的是SpringBoot2.x以后,jdk的版本必须是1.8以上!
确认了开发环境之后,我们再来添加相关的pom依赖。
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>注: 基于SpringBoot1.x以上SpringCloud是Dalston版本的eureka 依赖是 <artifactId>spring-cloud-starter-eureka</artifactId>,少了个 netflix 。SpringCloud的版本命名方式是通过伦敦的地方来命名的,版本顺序是根据首字母的顺序来的。
SpringCloud Eureka Hello World我们先来实现Eureka的Hello World版,其实也就是实现简单的服务注册和发现功能。
服务端首先建立一个服务端的工程,添加如上的依赖之后,在application.properties添加如下的配置:
配置信息:
spring.application.name=springcloud-eureka-client server.port=8000 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/配置说明:
spring.application.name: 这个是指定服务名称。
server.port:服务指定的端口。
eureka.client.register-with-eureka:表示是否将自己注册到Eureka Server,默认是true。
eureka.client.fetch-registry:表示是否从Eureka Server获取注册信息,默认为true。
eureka.client.serviceUrl.defaultZone: 这个是设置与Eureka Server交互的地址,客户端的查询服务和注册服务都需要依赖这个地址。
完成配置信息的添加后,我们再来看代码如何实现。
在服务端这边只需要在SpringBoot启动类添加@EnableEurekaServer注解就可以了,该注解表示此服务是一个服务注册中心服务。
代码示例:
@EnableEurekaServer @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); System.out.println("注册中心服务启动..."); } } 客户端这里我们在新建一个客户端的项目,添加如上的依赖之后,在application.properties添加如下的配置:
配置信息:
spring.application.name=springcloud-eureka-client server.port=9001 eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/配置说明:
spring.application.name: 这个是客户端的服务名称。如果有多个服务使用同一个名称但是访问地址不同,结合ribbon 使用,则可以实现负载均衡功能。
server.port:服务指定的端口。
eureka.client.serviceUrl.defaultZone: 注册中心服务端的地址。
服务端这边的实现也很简单,只需在启动类上添加@EnableDiscoveryClient该注解即可,使用该注解表示该项目就具有了服务注册的功能。