说在前面:
springcloud初级知识适合刚刚接触springcloud的人阅读和学习,如果您已经了解了不少springcloud知识,请移步springcloud中级\springcloud中级
我们从很多地方听说或者了解到了springcloud,分布式,微服务,等等等等当下互联网最火热的名词,但是为什么要学习springcloud呢?
微服务架构就是将单体的应用程序分成多个应用程序,这多个应用程序就成为微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信。
这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理。
说人话就是,微服务架构把一个很大的东西细分为很小很小的东西,就和一辆车需要很多零件和螺丝一样!但是汽车的目的是为了方便四级在现实世界出行,而微服务是为了方便程序员在架构中实现需求!
微服务微服务微服务,分布式分布式分布式,重要的事情说三遍,你学习springcloud就是为了分布式,springcloud是集成者而不是开创者。
Spring Cloud是一系列Java框架的有序集合。
它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud是服务框架的组合
Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
综上所述,springcloud即为服务框架的整合,通过springboot风格进行再封装屏蔽掉了复杂的配置和实现原理
总的来说优点大过于缺点,目前看来Spring Cloud是一套非常完善的分布式框架,目前很多企业开始用微服务、Spring Cloud的优势是显而易见的。因此对于想研究微服务架构的同学来说,学习Spring Cloud是一个不错的选择。
Spring Cloud Version | SpringBoot Version |
---|---|
2020.0.x aka Ilford | 2.4.x |
Hoxton | 2.2.x, 2.3.x (Starting with SR5) |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
Spring Cloud Eureka(现在闭源了):服务注册与发现
Spring Cloud Zuul(gateway):服务网关
Spring Cloud Ribbon:客户端负载均衡
Spring Cloud Feign:声明性的Web服务客户端
Spring Cloud Hystrix:断路器
Spring Cloud Config:分布式统一配置管理
等20几个框架,开源一直在更新
当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。
有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。
Eureka作为SpringCloud的服务注册功能服务器,他是服务注册中心,系统中的其他服务使用Eureka的客户端将其连接到Eureka Service中,并且保持心跳,这样工作人员可以通过Eureka Service来监控各个微服务是否运行正常。
SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理
在传统的RPC远程调用框架中,管理每个服务与服务之间的依赖关系比较复杂,管理比较麻烦,所以需要使用服务治理,管理服务于服务之间的依赖关系,可以实现服务调用,负载均衡,容错等,实现服务发现与注册。
Eureka采用了CS的设计架构,Eureka Server作为服务注册功能的服务器,他是服务注册中心。而系统中的其他微服务,使用Eureka 的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。
在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息:比如 服务地址通讯地址等以别名的方式注册到注册中心上。另一方面(消费者|服务提供者),会以该别名的方式去注册中心上获取到实际的服务服务通讯地址,然后再实现本低RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何RPC远程框架中,都会有一个注册中心(存放服务地址相关信息(如:接口地址))
各个微服务节点通过配置启动之后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。
本质是一个java客户端,用于简化Eureka Server 的交互,客户端同时也具备一个内置的,使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30s)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从注册服务表中把这个服务节点移除(默认90s)。
Eureka 的集群搭建方法很简单:每一台 Eureka 只需要在配置中指定另外多个 Eureka 的地址就可以实现一个集群的搭建了。
默认情况下,如果Eureka Service在一定时间内没有接收到某个微服务的心跳,Eureka Service会进入自我保护模式,在该模式下Eureka Service会保护服务注册表中的信息,不在删除注册表中的数据,当网络故障恢复后,Eureka Servic 节点会自动退出自我保护模式(好死不如赖活着)
在测试环境中不建议开启这个参数,生产环境中建议开启
我是跟着尚硅谷周阳老师学习的,这里附上视频地址
具体架构如下:
配置Eureka只需要实现一个springboot的主启动类就可以了,我写了两个是因为需要搭建集群,你也可以写三个或者更多。
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com # eureka服务端的实例名称
client:
register-with-eureka: false # false表示不向注册中心注册自己
fetch-registry: false # false表示自己端就是注册中心,职责就是维护实例,并不需要去检索服务
service-url:
# 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://eureka7002.com:7002/eureka/
server:
enable-self-preservation: true # eureka默认的保护机制,默认开启true 在此保护机制下,eureka不会因为微服务的突然停止而终止服务
eviction-interval-timer-in-ms: 0 # eureka默认的保护机制踢除时间
@SpringBootApplication
@EnableEurekaServer// 开启Eureka注册服务中心
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class,args);
}
}
server:
port: 8001
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
# defaultZone: http://localhost:7001/eureka 单机版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka # 集群版
instance:
instance-id: payment8001
prefer-ip-address: true # 访问路径可以显示IP地址
# eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认30s)
lease-renewal-interval-in-seconds: 1
# eureka服务端在收到最后一次心跳后的等待时间上限,单位为秒(默认90s),超时将剔除服务
lease-expiration-duration-in-seconds: 2
#配置mybatis
mybatis:
#设置别名
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.simple.springcloud.entities
configuration:
map-underscore-to-camel-case: true #开启这个的作用是可以让数据库中的p_Addr与pojo中的pAddr对应
@SpringBootApplication
@EnableEurekaClient // 通过注册中心进行访问
@EnableDiscoveryClient