文章目录
2. Eureka服务注册与发现
2.1 Eureka基础知识
服务治理
服务注册
Eureka两组件
2.2 单机Eureka构建步骤
eurekaServer端:服务注册中心
IDEA生成eurekaServer端服务注册中心类似物业公司
-
建module
- cloud-eureka-server7001
-
改pom
spring-cloud-starter-netflix-eureka-server
-
写yml
port:7001
hosthome:localhost
#eureka服务端的实例名字register-with-eureka: false
#表示不向注册中心注册自己fetch-registry: false
#表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
-
主启动
- 添加注解
@EnableEurekaServer // 设置为服务注册中心 EurekaServer
- 添加注解
-
测试
- 访问:http://localhost:7001/
EurekaClient端payment8001注册进服务端
EurekaClient端cloud-provider-payment8001将注册进EurekaServer成为服务提供者provider,类似尚硅谷学校对外提供授课服务
- 改pom
- 添加
spring-cloud-starter-netflix-eureka-client
- 添加
- 写yml
- 添加
eureka
,client
register-with-eureka: true
fetchRegistry: true
defaultZone: http://localhost:7001/eureka
- 添加
- 主启动
- 添加注解
@EnableEurekaClinet
- 添加注解
- 测试
- 先启动EurekaServer
- 访问http://localhost:7001/,在Application中显示了支付模块
- 微服务注册名就是spring:application:name
EurekaClient端order80注册进服务端
EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer,类似来尚硅谷上课消费的各位同学
- 改pom
- 添加
spring-cloud-starter-netflix-eureka-client
- 添加
- 写yml
- 添加
eureka
,client
register-with-eureka: true
fetchRegistry: true
defaultZone: http://localhost:7001/eureka
- 添加
- 主启动
- 添加注解
@EnableEurekaClinet
- 添加注解
- 测试
- 先启动EurekaServer
- 访问http://localhost:7001/,在Application中显示了消费模块
- 微服务注册名就是spring:application:name
2.3 集群Eureka构建步骤
互相注册,相互守望
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ClEj5e7p-1655004137626)(F:\1111yjs\笔记\SpringCloud.assets\image-20220611164609885.png)]
集群构建
- 参考参考cloud-eureka-server7001新建新建cloud-eureka-server7002
- 修改pom
- 修改映射配置
- 找到C:\Windows\System32\drivers\etc路径下的hosts文件
- 修改映射配置添加进hosts文件:127.0.0.1 eureka7001.com,127.0.0.1 eureka7002.com
- 写yml
- 7001的yml修改如下:
defaultZone: http://eureka7002.com:7002/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
- 7002的yml修改如下:
defaultZone: http://eureka7001.com:7001/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
- 7001的yml修改如下:
- 主启动(复制cloud-eureka-server7001的主启动类到7002即可)
支付服务8001发布到集群
修改yml文件
service-url:
# defaultZone: http://localhost:7001/eureka # 单机配置
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
订单服务80发布到集群
修改yml文件
service-url:
# defaultZone: http://localhost:7001/eureka # 单机配置
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
支付服务集群构建
- 参考cloud-provider-payment8001新建新建cloud-provider-payment8002
- 改pom
- 写yml:改端口
- 主启动
- 修改 8001/8002 的 Controller
- 在controller内新建属性
serverPort
,将端口号值赋予他 - 在查询成功信息中输出端口号
- 在controller内新建属性
负载均衡
- bug :每次访问都只有8001工作。这是因为原始订单服务访问地址写死,现改为注册中心微服务的名称
public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
- 上述代码仍会报错,不再写死后需要提供默认的负载均衡方式。在order80的
RestTemplate
上添加注解@LoadBalanced
,赋予RestTemplate负载均衡的能力。默认为轮询负载机制,一人一次。
2.4 actuator微服务信息完善
-
服务名修改:希望在eureka界面上只显示微服务名不显示前面localhost等。
instance: instance-id: payment8001
-
访问信息有ip信息提示
prefer-ip-address: true
2.5 服务发现Discovery
- 对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息
- 修改cloud-provider-payment8001的Controller
- 属性引入
DiscoveryClient
,添加@Resource
注解 discoveryClient.getServices()方法
:微服务名称有哪些discoveryClient.getServices()方法
:当前微服务名称下的具体实例
- 属性引入
- 8001主启动类:添加注解
@EnableDiscoveryClient
2.6 Eureka自我保护
自我保护现象和原理
关闭自我保护
-
在7001的服务端
- 关闭自我保护:
enable-self-preservation: false
- 心跳设置两秒:
eviction-interval-timer-in-ms: 2000
- 关闭自我保护:
-
在8001客户端
-
eureka.instance.lease-renewal-interval-in-seconds=1
客户端向服务端发送心跳间隔时间,默认30秒
-
eureka.instance.lease-expiration-duration-in-seconds=2
服务端收到最后一次心跳等待时间,默认90秒
-
-
先启动7001再启动8001,先关闭8001,8001马上被剔除