壹
微服务是一种架构风格,设计思想
特点 ① 由一系列微小的服务组成
② 运行独立,互不干扰
③ 独立部署
④ 每个微小的服务都有自己的业务实现
⑤ 各自独立分散服务管理-->分布式管理
单体架构: 测试的时候在一起,容易测试,部署的时候就一个war包,这种架构开发效率受到影响,当应用越来越大的时候,维护起来比较麻烦,改动应用小bug需要重新整体部署,部署一次也可能需要很长的时间,模块性能扩展有限
贰
服务注册发现: 注册方提供信息, 服务方通过注册方的信息, 发现注册服务;
服务网关: 除了服务的信息交互,还需要与外界进行交互,所以需要暴露自己的服务,但也不能什么都暴露,就涉及到服务网关,网关可以过滤后端信息,前端配合需要路由控制引导微服务选择,因为所有的请求都会经过网关,所以还可以限流,容错,监控,日志,安全,防爬虫等等操作
后端服务,前端服务: 互相配合,完成服务的最简化业务实现. 比如后端服务提供A,B接口,前端服务可以根据业务场景拆分,聚合后端服务,将A,B合并返回或者拆分A中的一部分返回.
方案A: Spring全家桶 ...(本次,就决定是他了)
方案B: Dubbo服务,Zookeeper注册中心 ...
SpringCloud提供了微服务开发所需的配置,是一个开发工具集,有很多个子项目,开源框架
利用SpringBoot开发,方便, 基于Netflix开源组件封装,强大的微服务组件
总而言之SpringCloud简化了分布式开发,重要在理解分布式、架构特点以及组件
叁
SpringCloud Eureka基于Netflix Eureka的封装,
主要两个组件: 注册中心(Eureka Server)、服务注册(Eureka Client)
Eureka Server 注册中心
注册中心记录服务信息,状态, 比如服务名字,运行的情况
创建E:/MyCloud文件夹,后续实践的应用都放在此处
利用IDEA的Spring Initializr构建一个SpringBoot项目,第一步
第二步,选择Cloud Discovery-Eureka Server,并且SpringBoot版本2.0.2
第三步,选择我的创建路径目录E:/MyCloud
第四步,创建好了,把不需要的文件删除掉,没用
右下角会提示说Add as Maven Project or Disable notification,
选择Add as Maven Project,加载一会就好了, 最后的目录展示
如果觉得com.server.eureka不爽,不想叠在一起,可以按下图设置一下,
把Hide Empty Middle Packages的勾去掉
再启动类上加一个注解@EnableEurekaServer,标识他是EurekaServer注册中心
启动项目的时候会报一些错,先不管,访问一下localhost:8080,成功 如下
Instances currently registered with Eureka是注册服务列表
目前只有Server,还没有建立Client,所以是空的
回来看控制器报错的原因,关于@EnableEurekaServer注解
Cannot execute request on any known server
因为他虽然被标识为Server,但他自己同时也是Client,会心跳检测Server,没有找到报错
在application.yml文件中配置,顺便加个name,运行
spring: application: name: my first eureka eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
每次不知道怎么配置的时候,可以Ctrl+左键,进入查看方法信息,或多或少可以知道点套路
这时候,服务中心 发现了自己,name为刚刚设置的my first eureka,默认Zone也替换掉了
经过上面的测试,回到服务中心,我们就想他做一件事就够了,不用又做服务中心,又做注册服务的,
所以在刚刚的yml文件中加一个配置register-with-eureka: false ,对于此eureka取消注册
spring: application: name: my first eureka eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ register-with-eureka: false
重启访问,就会发现没有注册服务了,OK完成
提示端口8080很常用,建议改一个,eureka的默认是8761
应用启动时,控制台有很多提示信息
yml 配置属性
// 将IP注册到Eureka Server上,如果不配置就是机器的主机名
eureka.instance.prefer-ip-address=true
// 设置自我保护
eureka.server.enable-self-preservation=false
// 自我保护系数(默认0.85)
eureka.server.renewal-percent-threshold=0.55
// 表示是否将自己注册到Eureka Server,默认为true
eureka.client.register-with-eureka=false
// 表示是否从Eureka Server获取注册信息,默认为true
eureka.client.fetch-registry=false
// 自动检查失效服务的间隔时间(单位毫秒)
eureka.server.eviction-interval-timer-in-ms=6000
// 设置eureka server同步失败的等待时间 默认 5分 , 在这期间,它不向客户端提供服务注册信息
eureka.server.wait-time-in-ms-when-sync-empty=5
// 设置eureka server同步失败的重试次数 默认为 5 次
eureka.server.number-of-replication-retries=5
--------------------------------------------------------