Spring Cloud简介
Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
注意:如果将maven仓库配置成了阿里云的仓库,会出现相关依赖包无法导入的情况,需要在idea创建项目的时候直接选择官方提供的依赖包或者在maven官方仓库搜索相关的依赖包的版本,在复制过来的依赖上加上版本即可解决。
微服务架构
微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。
CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
Eureka(服务发现)
创建“服务注册中心”:
-
新建一个SpringBoot项目,在添加依赖的时候选择Eureka Server
可以看到依赖
-
通过
@EnableEurekaServer
注解启动一个服务注册中心提供给其他应用进行对话,在启动类上加上这个注解 -
在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,在applicaiton.yml进行配置。
server: port: 1001 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${ eureka.instance.hostname}:${ server.port}/eureka/
-
启动项目,访问localhost:1001,可以看到此时还没有发现任何服务。
-
服务注册类配置
参数名 说明 默认值 enabled 启用Eureka客户端 true registryFetchIntervalSeconds 从Eureka服务端获取注册信息的间隔时间,单位为秒 30 instanceInfoReplicationIntervalSeconds 更新实例信息的变化到Eureka服务端的间隔时间,单位为秒 30 initialInstanceInfoReplicationIntervalSeconds 初始化实例信息到Eureka服务端的间隔时间,单位为秒 40 eurekaServiceUrlPollIntervalSeconds 轮询Eureka服务端地址更改的间隔时间,单位为秒。当我们与Spring CLoud Config整合,动态刷新Eureka的serviceURL地址时需要关注该参数 300 eurekaServerReadTimeoutSeconds 读取Eureka Server信息的超时时间,单位为秒 8 eurekaServerConnectTimeoutSeconds 链接Eureka Server的超时时间,单位为秒 5 eurekaServerTotalConnections 从Eureka客户端到所有Eureka服务端的连接总数 200 eurekaServerTotalConnectionsPerHost 从Eureka客户端到每个Eureka服务端主机的连接总数 50 eurekaConnectionIdleTimeoutSeconds Eureka服务端连接的空闲关闭时间,单位为秒 30 heartbeatExecutorThreadPoolSize 心跳连接池的初始化线程数 2 heartbeatExecutorExponentialBackOffBound 心跳超时重试延迟时间的最大乘数值 10 cacheRefreshExecutorThreadPoolSize 缓存刷新线程池的初始化线程数 2 cacheRefreshExecutorExponentialBackOffBound 缓存刷新重试延迟时间的最大乘数值 10 useDnsForFetchingServiceUrls 使用DNS来获取Eureka服务端的serviceUrl false registerWithEureka 是否要将自身的实例信息注册到Eureka服务端 true preferSameZoneEureka 是否偏好使用处于相同Zone的Eureka服务端 true filterOnlyUpInstances 获取实例时是否过滤,仅保留UP状态的实例 true fetchRegistry 是否从Eureka服务端获取注册信息 true -
服务实例类配置
参数名 说明 默认值 preferIpAddress 是否优先使用IP地址作为主机名的标识 false leaseRenewalIntervalInSeconds Eureka客户端向服务端发送心跳的时间间隔,单位为秒 30 leaseExpirationDurationInSeconds Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒。超过该时间之后服务端会将该服务实例从服务清单中剔除,从而禁止服务调用请求被发送到该实例上 90 nonSecurePort 非安全的通信端口号 80 securePort 安全的通信端口号 443 nonSecurePortEnabled 是否启用非安全的通信端口号 true securePortEnabled 是否启用安全的通信端口号 appname 服务名,默认取spring.application.name的配置值,如果没有则为unknown hostname 主机名,不配置的时候讲根据操作系统的主机名来获取
创建“服务提供方”
-
创建新项目,选择依赖。(还需要选上spring-web,因为要启动访问)
创建完成后可以看到依赖:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
在启动类上添加
@EnableEurekaClient
或@EnableDi