第一章、Spring Cloud介绍
Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,springcloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,springcloud做为大管家需要管理好这些微服务,自然需要很多小弟来帮忙。
下面是Spring Cloud的组成组件:
下面重点介绍一下几个常用的组件
第二章、注册中心Eureka
2.1 Eureka介绍
Eureka 是一个基于 REST 的服务,主要在 AWS 云中使用, 定位服务来进行中间层服务器的负载均衡和故障转移。
Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。
这样做的好处是服务调用方通过服务中心来获取服务,不需要关注调用的项目IP地址,由几台服务器组成,每次直接去服务中心获取可以使用的服务去调用既可。
Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。用一张图表示:
2.2 实际例子
新建一个项目com.eureka.center1作为Eureka的服务器。
2.2.1 引入pom
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2.2 启动类增加注解
@SpringBootApplication
@EnableEurekaServer
public class Center1Application {
public static void main(String[] args) {
SpringApplication.run(Center1Application.class, args);
}
}
2.2.3 配置文件
server.port=8082
spring.application.name=eureka_center
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:${server.port}/eureka
eureka.client.register-with-eureka :表示是否将自己注册到Eureka Server,默认为true。
**eureka.client.fetch-registry **:表示是否从Eureka Server获取注册信息,默认为true。
eureka.client.serviceUrl.defaultZone :设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
更多配置见EUREKA更多配置
2.2.4 启动
直接启动工程,访问http://localhost:8082/ ,可以看到我们已经部署成功,此时并没有服务注册。
2.3 集群
Eureka作为服务中心,如果是单点的话,一旦遇到故障就是毁灭性的,因此为了维持注册中心的高可用性,使用集群是一个很好的解决方案。
重点就是将eureka的serverUrl指向其他可用的服务中心
2.3.1
将center1的配置更改如下:
spring.application.name=eureka_center
eureka.instance.hostname=centerone
eureka.client.service-url.defaultZone=http://centertwo:8083/eureka
2.3.2 将启动类加上注解
启动类加上**@EnableDiscoveryClient**注解,允许eureka找到服务
2.3.3 center2配置
复制center1改为center2,serverUrl指向center1,其它类似。
2.3.4 本地劫持域名
将上述域名劫持到本地:
127.0.0.1 centerone
127.0.0.1 centertwo