SpringCloud之注解

Zuul

@EnableZuulServer

在这里插入图片描述

pre类型过滤器

ServletDetectionFilter:该过滤器用于检查请求是否通过Spring Dispatcher。检查后,通过isDispatcherServletRequest设置布尔值。
FormBodyWrapperFilter:解析表单数据,并为请求重新编码。
DebugFilter:顾名思义,调试用的过滤器,可以通过zuul.debug.request=true,或在请求时,加上debug=true的参数,例如$ZUUL_HOST:ZUUL_PORT/path?debug=true开启该过滤器。这样,该过滤器就会把RequestContext.setDebugRouting()、RequestContext.setDebugRequest()设为true。

route类型过滤器

SendForwardFilter:该过滤器使用Servlet RequestDispatcher转发请求,转发位置存储在RequestContext.getCurrentContext().get(“forward.to”)中。可以将路由设置成:

routes:
    abc:
      path: /abc/**
      url: forward:/abc

post类型过滤器

SendResponseFilter:将Zuul所代理的微服务的响应写入当前响应。

error类型过滤器

SendErrorFilter:如果RequestContext.getThrowable()不为null,那么默认就会转发到/error,也可以设置error.path属性修改默认的转发路径。

@EnableZuulProxy

如果使用注解@EnableZuulProxy,那么除上述过滤器之外,Spring Cloud还会增加以下过滤器:
在这里插入图片描述

pre类型过滤器

PreDecorationFilter:该过滤器根据提供的RouteLocator确定路由到的地址,以及怎样去路由。该路由器也可为后端请求设置
各种代理相关的header。

route类型过滤器

RibbonRoutingFilter:该过滤器使用Ribbon,Hystrix和可插拔的HTTP客户端发送请求。serviceId在RequestContext.getCurrentContext().get(“serviceId”)中。该过滤器可使用不同的HTTP客户端,例如
(1) Apache HttpClient:默认的HTTP客户端
(2) SquareupOkHttpClient v3:如需使用该客户端,需保证com.squareup.okhttp3的依赖在classpath中,并设置ribbon.okhttp.enabled = true。
(3) Netflix Ribbon HTTP client:设置ribbon.restclient.enabled = true即可启用该HTTP客户端。需要注意的是,该客户端有一定限制,例如不支持PATCH方法,另外,它有内置的重试机制。

SimpleHostRoutingFilter:该过滤器通过Apache HttpClient向指定的URL发送请求。URL在RequestContext.getRouteHost()中。

二者的区别

@EnableZuulServer - 普通Zuul Server,只支持基本的route与filter功能.
@EnableZuulProxy - 普通Zuul Server+服务发现、负载均衡,熔断等功能。也就是@EnableZuulServer的增强版,具有反向代理功能.

Eureka

@EnableEurekaClient

伊瑞卡客户端服务发现注解
@EnableEurekaClient基于spring-cloud-netflix

@EnableDiscoveryClient

服务发现注解
@EnableDiscoveryClient基于spring-cloud-commons

两者的区别

注册中心是 Eureka 就使用 @EnableEurekaClient,其他的注册中心可以使用 @EnableDiscoveryClient。

@Feign

@EnableFeignClients

注解@EnableFeignClients(basePackages=“cn.qin.client”)启用feign客户端,并扫描后面的包。

@FeignClient

定义feign客户端 ;

@FeignClient(name = "test-service", path = "/test")
public interface TestService {
    @RequestMapping(value = "/echo", method = RequestMethod.GET)
    TestModel echo(@RequestParam("parameter") String parameter);
}

定义客户端的意思是将远程服务http://test-service/test/echo映射为一个本地Java方法调用。

@LoadBalanced

用在注册Resttemplate,注册Template时一定要开启负载均衡。

   @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

这个注解主要是通过拦截器在RestTemplate工作前进行负载均衡。该拦截器中注入了LoadBalancerClient(负载均衡客户端)的实现。
我们在使用RestTemplate时候采用了服务名作为host,所以直接从HttpRequest的URI对象中通过getHost()就可以拿到服务名,然后调用execute函数去根据服务名来选择实例并发起实际的请求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万码无虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值