一、概述
学习任何一门新的语言,从HelloWorld入门是最合适的,SpringCloud也不例外。最简单的Spring Cloud微服务架构包括服务发现与服务提供者(即在一个大型系统拆分出来的子模块),最极端的微服务就是做到一个方法就是一个服务,一个方法就是一个项目。在一个系统中,服务怎么拆分,要具体问题具体分析,也取决于系统的并发性、高可用性等因素。
二、SpringCloud五大神兽
①服务发现:Netflix Eureka
②客户端负载均衡:Netflix Ribbon
③熔断器:Netflix HyStrix,当服务调用出现任何异常时,可以利用熔断的逻辑完成错误的解决
④服务网关:Netflix Zuul,类似于nginx反向代理功能,不过netflix增加了一些配合其他组件的特性,配合Spring Cloud Bus可以实现动态的配置更新
⑤分布式配置:Spring Cloud config
三、Eureka介绍
(1)Eureka是什么?
Eureka是NetFlix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper
Eureka采用C-S的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心。
系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。SpringCloud的一些其他模块(比如Zuul)就可以通过Eureka Server来发现系统中的其他微服务,并执行相关的逻辑。
(2)三大角色
①Eureka Server:提供服务注册和发现
②Service Provider:服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到
③Service Consumer:服务消费方从Eureka获取注册服务列表,从而消费服务
三、Eureka构建步骤
本工程代码已上传至Github:
(1)新建Module,pom添加如下配置:
<parent> <artifactId>microservice-demo-study</artifactId> <groupId>com.microservice</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>microservice-eureka</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
(2)增加application.yml配置文件,如下:
server:
port: 8001
spring:
application:
name: microservice-eureka
eureka:
instance:
hostname: localhost #eureka服务端实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与Eureka Server交互的地址查询服务和注册服务
(3)启动Application
@SpringBootApplication
@Slf4j
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
try {
SpringApplication.run(ApplicationBoot.class, args);
} catch (Throwable t) {
log.error("启动失败", t);
throw t;
}
}
}
(4)访问浏览器:localhost:8001
至此,Eureka服务端已经构建完成,下面就是构建provider
四、Provider构建
(1)new一个Module,pom添加如下:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
(2)application.yml格式添加如下:
server:
port: 9001
spring:
application:
name: microservice-provider
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
(3)启动Application
@SpringBootApplication
@Slf4j
@EnableEurekaClient
public class Application {
public static void main(String[] args) {
try {
SpringApplication.run(ApplicationBoot.class, args);
} catch (Throwable t) {
log.error("启动失败", t);
throw t;
}
}
}
(4)浏览器访问:localhost:8001