1.搭建Eureka:
与nacos区别在于需要自己创建一个服务
- 新建spring模块: sp05-eureka
- 添加依赖
- yml
- 禁用自我保护模式
- 主机名:eureka1
- 单台服务器(集群的话是要互相注册互相拉的)
- 不向自己注册
- 不从自己拉取
4. 启动类注解: @EnableEurekaServer 通过注解触发自动配置
pom文件里记得绑定到父类的springboot版本与springcloud的版本
注意:yml的文件编译语言UTF8否则注释的话会报错
四条运行机制:
- 注册 客户端主动连接服务器进行注册,会一次一次反复注册,直到注册成功为止
- 拉取 客户端每30秒拉取服务列表,会刷新更新本地缓存的注册表
- 心跳 30秒一发 客户端连续三次收不到心跳,就会删除其注册信息
- 自我保护模式 由于网络不稳定,网络中断,大量服务器出现心跳异常 15分钟内85%的服务出现心跳异常会自动进入自我保护模式(就是心跳3次也没返回,也不删除)等待网络恢复,开发调试期间可以禁用保护模式,避免影响测试
客户端咋注册(客户端就是要注册到eureka的服务)
1.添加eureka-client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.yml配置
- eureka.client.service-url.defaultZone(这个默认地址写的时候没有提示注意拼写):http://eureka1:2001/eureka(浏览器访问不到的,host文件进行了指定)也可以配置为云端服务器
3.先启动eureka的服务,再启动其他的服务,启动eureka会自动生成一个8761端口的默认的集群服务器,咱们也没设置所以就是个虚的,不存在,所以会eureka服务会报错,当自己搭了个集群服务器,就不会再创建这个默认的集群服务器
2.高可用
商品高可用:
一旦服务器宕机了咋整,要有一个备用机顶上
editConfiguration → 克隆itemservice → 修改端口号
这样就做到了同一个服务有两台服务器,从而实现该服务的高可用
java -jar a.jar --eureka.instace.hostname --eureka.client.register
eureka高可用:
1.创建对应的profile配置文件
1.application-erueka1.yml profile文件写法固定的: application-profile文件名.yml
2.application-erueka2.yml
2.启动配置:
1.Sp05Eureka-2001
添加EditConfigration :--spring.profiles.active=eureka1激活:开启profile文件就会和主配置一同加载,相同的用主配置,不同的用profile配置的
3.若服务A指向服务B,而B没有启动,则还是会默认为localhost:8761这个虚无的集群服务器
4.让服务去连接多台eureka服务器 就在yml文件中去添加对应地址,eureka.client.service-url.defaultZone 后继续加,用“,”隔开
#140.82.112.4 github.com#host文件可以试试
3.服务远程调用
1.对应要调用的服务添加spring.cloud.starter.openfeign依赖
2.启动类添加@EnableFeignClients
3.写远程调用的接口
1.配置要调用那个服务
在对应接口的上方添加@FeignClient注解(服务名称是在对应的yml中的名字与项目名无关)
2.调用那个方法
根据对应的服务使用的请求类型与本接口中的用的都是一样的注解,之后写方法,与调用的 服务的返回值要相同,参数列表也要相同
3.提交什么参数
方法的参数列表与调用服务的参数列表也要相同
注意:原来的controller/restController注解下的XxxMapper注解是接收参数
fegin中的XxxMapper是上传参数
Fegin集成Ribbon
- Ribbon提供负载均衡(根据服务实例数与负载均衡规则实现负载均衡)和重试功能(重试调用,失败重新调用,容错方式)
- 当你用了Fegin,就默认启用Ribbon的负载均衡与重试功能
- Ribbon重试
- 向后台服务调用时出错(异常,500,超时:调用1s不返回结果也算失败),会自动重试调用
- 重试参数:(一般只配置前两个)
- MaxAutoRetries:单台服务器重试次数 默认:0
- MaxAutoRetriesNextServer:更换服务器的次数 默认:1
- 我们的服务一般都是高可用,也就是一个服务后面有多个服务器,例如我单台服务器重试次数设置为1,而更换服务的次数为2,首先会去调用第一台服务器,若出错,会再对第一台服务器发起请求重试,出错,更换第1次服务器,发起请求去第2台服务器,出错,重试1次,出错,更换第2次服务器,发起请求去第3台服务器,出错,重试1次,出错,返回报错
- ReadTimeOut - 等待接收响应的超时时间 1000ms
- OKToRetryOnAllOperations - 是否对所有类型请求都重试,Ribbon默认只对Get请求重试
- ConnectTimeout - 与服务器建立连接的等待时间 默认1000ms 超1000ms 就会发起重试