springCould学习笔记(1):服务注册与服务发现

大致了解了 springcloud底层原理与组件理解 之后,练习搭建一个demo项目尝试一下。

首先建立一个maven项目,然后建立它的子项目,这里如果不清楚的话,要先学习一下maven集合项目相关的知识。

然后如果没有用过springboot的话要学习一些springboot,就了解一下项目的大致结构就可以

例如最简单的:配置文件放在resource目录下,入口类要放在包下,不然springboot项目运行会报错。

然后配置正确的注解就可以了。具体一步一步的流程和一些配置文件的内容可参考方志朋大神的文章:

https://blog.csdn.net/forezp/article/details/81040925

里面有一整套组件的教程,简直恩人。

第一个小阶段完成后,感悟是基础还是要打好。


问题记录:修改端口运行了客户端的两个实例后,模拟一个小集群。

项目的实际目录状态:springcloud是父maven项目,下面有两个项目,一个是eureka的server,一个是eureka的client(其实就是正常的功能模块项目,提供相关的增删改查接口,为了让不同的功能模块项目互相知道所以要配置eureka的client)
在这里插入图片描述
项目的实际运行状态是:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
问题是:我另外还启动了8764端口的项目,eureka的server也正常检测到了,但是我把8764的项目关闭了之后,server却没有正常的感知到,因为server上报了“EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.”这个警告。
原因是eurekaServer进去了保护模式。不会注销任何微服务
解决方案有两种,
一种是修改eureka server和client的配置, 剔除过期等不健康实例(生产环境不建议使用)
server端:

1.关闭注册中心自我保护机制
    eureka.server.enable-self-preservation:false
2.注册中心清理间隔(单位毫秒,默认60*1000)
    eureka.server.eviction-interval-timer-in-ms:10000**

client端:

1.开启健康检查(需要spring-boot-starter-actuator依赖)
    eureka.client.healthcheck.enabled:true
2.租期更新时间间隔(默认30秒)
    eureka.instance.lease-renewal-interval-in-seconds=10
3.租期到期时间(默认90秒)
    eureka.instance.lease-expiration-duration-in-seconds=15

另一种就是就是后续配置ribbon或者Hystrix

1.Hystrix,在fallback方法中shutdown指定的服务
2.让zuul只路由到活着的那个服务:
添加依赖:
  <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>okhttp</artifactId>
      <version>3.6.0</version>
  </dependency>
配置文件:
ribbon.connectTimeout: 2000
ribbon.readTimeout: 10000
ribbon.maxAutoRetries: 1
ribbon.maxAutoRetriesNextServer: 2
ribbon.okToRetryOnAllOperations: true
ribbon.okhttp.enabled: true
3.重试机制(和上述一个道理)
spring.cloud.loadbalancer.retry.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
hello-service.ribbon.ConnectTimeout=250
hello-service.ribbon.ReadTimeout=1000
hello-service.ribbon.OkToRetryOnAllOperations=true
hello-service.ribbon.MaxAutoRetriesNextServer=2
hello-service.ribbon.MaxAutoRetries=1


spring.cloud.loadbalancer.retry.enabled:该参数用来开启重试机制,它默认是关闭的。这里需要注意,官方文档中的配置参数少了enabled
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:断路器的超时时间需要大于ribbon的超时时间,不然不会触发重试。

hello-service.ribbon.ConnectTimeout:请求连接的超时时间

hello-service.ribbon.ReadTimeout:请求处理的超时时间

hello-service.ribbon.OkToRetryOnAllOperations:对所有操作请求都进行重试

hello-service.ribbon.MaxAutoRetriesNextServer:切换实例的重试次数

hello-service.ribbon.MaxAutoRetries:对当前实例的重试次数

具体的原理和更多的配置可以去这位大神博客看:
https://blog.csdn.net/cvntopuyef/article/details/78465798
https://blog.csdn.net/cvntopuyef/article/details/78477681

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值