spring cloud 第一阶段总结

tech2025-04-10  5

一、相关组件说明:1.eureka:     实现服务的注册和发现的功能。并提供服务的健康监测,以及友好的UI。类似组件Consul和zookeeper。     在server(高可用需要集群)启动类添加注解@EnableEurekaServer

application.properties配置文件

server.port=8761 eureka.instance.hostname=localhost eureka.client.serviceUrl.defaultZone=eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

# 防止自己注册自己 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false

 

         在client启动类添加注解@EnableEurekaClient     application.properties配置文件:

server.port=8762

# 服务注册地址,指向server的设置地址,要保持与上面的eureka.client.serviceUrl.defaultZone保持一致 eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ spring.application.name=eureka-client

2.ribbon:     负载均衡。通常和eureka、Zuul、RestTemplate(或者feign)配合使用。 ribbon和Zuul配合使用,很容易做到负载均衡,将请求根据负载均衡策略分配到不同的服务实例中 ribbon和restTemplate、feign结合使用,在消费服务时能够做到负载均衡。

3.feign 声明式调用:     个人理解,与restTemplate属于同级组件,feign能使http请求更简单(一个标签就可以) 使用feign与ribbon结合,实现负载均衡:

启动类添加注解:

@EnableEurekaClient @SpringBootApplication @EnableFeignClients

创建接口,并与server调用接口内的方法,由controller暴露API接口,request请求该服务的controller。

/**  * value为远程调用其他服务的服务名  * feignConfig.class为feign client的配置类  * fallback为熔断器接口  * @author gaoshiliang  */ @FeignClient(value = "eureka-client" , configuration = FeignConfig.class , fallback = EurekaClientFeignHystrixImp.class) public interface EurekaClientFeign {

    /**      * 通过feign来调用eureka-client服务的“/hi”的API接口      * @param name      * @return      */     @GetMapping("/hi")     String sayHiFromClientEureka(@RequestParam(value = "name") String name) ; }

使用restTemplate与ribbon结合,实现负载均衡:

@Service public class RibbonService {

    @Autowired     RestTemplate restTemplate ;          /**      * 对该方法使用熔断器,当访问地址无法调用时,会执行hiError方法      * 当eureka-client不可用时,开启熔断器,最后进入fallbackMethod逻辑      * 这样做可以通过快速失败,请求能够得到及时处理,线程不在阻塞      * @param name      * @return      */     @HystrixCommand(fallbackMethod = "hiError")     public String hi(String name) {         return restTemplate.getForObject("http://eureka-client/hi?name="+name, String.class) ;     }          public String hiError(String name) {         return "hi," + name + ",sorry, error!" ;     }

4.Hystrix熔断器 设计原则:

防止单个服务的故障耗尽整个服务的servlet容器(如Tomcat的线程资源;快速失败机制,如果某个服务出现了故障,则调用该服务的请求快速失败,而不是线程等待;提供回退(fallback方案,在请求发生故障时,提供设定好的回退方案;使用熔断机制,防止故障扩散到其他服务;提供熔断器的监控组件hystrix dashbord,可以实施监控熔断器的状态。

工作机制

如上图:

当某个服务的某个API接口的失败次数在一定时间内小于设定的阈值时,熔断器处于关闭状态,该API接口能够正常提供服务。当该API接口处理请求的失败次数大于设定的阈值时,Hystrix判定该API出现了故障,打开熔断器,这时请求该API接口会执行快速失败的逻辑,即fallback,不执行业务逻辑,请求的线程不会处于阻塞状态。处于打开状态的熔断器,一段时间后会处于半打开转态,将部分请求执行业务逻辑,其余则快速返回失败。若正常执行业务逻辑的请求失败了,则熔断器继续开启,若成功,则关闭熔断器,这样熔断器就有了自我修复的能力。

5.zuul路由网关 作用如下:

Zuul、ribbon以及Eureka相结合,可以实现智能路由和负载均衡的功能,Zuul能够将请求流量某种策 略分发到集群的多个服务实例。网关将所的API接口统一聚合,并统一对外暴露。外界系统调用API接口时,都是网关对外暴露的API接口,外界系统不需要知道微服务系统中各服务相互调用的复杂性。微服务也起到了保护器内部微服务单元的API接口,防止其被外界直接调用,导致服务的敏感信息对外暴露。网关服务可以做用户身份信息认证和权限人质,防止非法请求操作API接口,对服务器起到保护作用。网关可以实现监控功能,实时日志输出,对请求进行记录。网关可以用来实现流量监控,在高流量的情况下,对服务进行降级。API接口从内部服务分离出来,方便做测试。
最新回复(0)