- Spring Cloud一些基础概念
- 介绍Spring Cloud的一些基本组件
- 介绍一些组件的替代方案
服务提供者和服务消费者
- 服务提供者:对应的进行相关数据库操作并向外界提供API接口
- 服务消费者:对应的消费服务提供者提供的API,以实现相应的需求。
- 关键实现:使用RestTemplate作为客户端向相应API发出请求
存在的问题:
- 1、API硬编码问题
- 2、服务发现与注册
- 服务消费者和服务提供者均需要在服务发现组件中进行注册。
- 服务发现组件的功能:服务注册表(数据库)的相关维护,服务注册,健康检查(心跳机制)
- 3、服务发现的方式
- 客户端发现:Eureka 和 Zk
- 服务端发现: Consul + nginx
服务发现和注册
Eureka 服务发现 @EnableEurekaServer
两种服务调用方式
Ribbon + RestTemplate
- Ribbon 是一个负载均衡客户端,很好地控制http和tcp的行为
- 对RestTemplate使用 @LoadBalanced注解,实现负载均衡。
- 可以使用 @RibbonClient注解来指定相关配置,并编写配置类自定义负载均衡策略。(通过代码的方式自定义配置)
- 也可以使用配置文件进行负载均衡的相关配置。
- LoadBalancerClient可以获取相关客户端信息。
Feign
- Feign 是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
- @FeignClients表明客户端继承了 Feign
- 使用 @FeignClients("spring-application-name")修饰自定义的xxxFeignClient类,又因为SpringCloud集成了SpringMVC的相关特性,默认使用了mvc的contract。故可以在接口中定义的方法上使用 mvc 相关注解修饰并进行 url 以及 method的匹配从而模拟出相应的http请求。
- 再在消费者的Controller中注入对应的xxxFeignCLient,在对应的方法中调用client的相关模拟请求实现需求。
- 对于FeignClient也可以使用自定义配置,通过在注解中指定configuration,并编写相关 Config类来实现。config类使用 @Configuration注解。
Feign 和 Ribbon 的常见问题:
Hystrix相关:
Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题
- 原因: Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒了。
- 解决方案:在配置文件中进行相关配置:
- hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000
- hystrix.command.default.execution.timeout.enabled: false
- feign.hystrix.enabled: false
x
感谢您的支持,我会继续努力的!
扫码打赏,你说多少就多少