zoukankan      html  css  js  c++  java
  • 部署eureka集群时defaultZone中为什么必须包含路径/eureka

    1、这是因为在eureka server的实现中存在一个web请求过滤器,其url模式就是【/eureka/*】。注意这不并是过滤应用的上下文路径,而是过滤剩下的请求路径,所以即使将【server.context-path】设置为【/eureka】,各个节点之间还是无法连通,只有将defaultZone设置为【http://eureka00.com/eureka/eureka】才行。

    2、eureka集群的各个节点是通过一系列接口进行通信的。

     3、但【spring-cloud-netflix-eureka-server】包中存在下图的【spring.factories】文件,根据SpringBoot加载规则,在应用启动时会加载配置类【EurekaServerAutoConfiguration】。

     4、在该配置类中先通过方法【jerseyApplication】收集被【Path】和【Provider】注释的资源类,然后在方法【jerseyFilterRegistration】中将资源类放入到过滤器【ServletContainer】中,再生成一个包含【径滤过滤】的注册类【FilterRegistrationBean】,随后SpringBoot会将该过滤器加入对web请求的过滤器链中。

     5、该过滤器的url过滤模式为常量【DEFAULT_PREFIX】即“/eureka”。

    6、SpringBoot执行配置过滤器注册Bean。

     7、tomcat将其加入到自己上下文过滤器集合中。

     8、tomcat在处理请求是将通过方法【createFilterChain】建立过滤器链,对于不符合url模式的请求将跳过前面提到的包含接口资源类的过滤器容器【ServletContainer】。

     9、在tomcat过滤器链【ApplicationFilterChain】的方法【internalDoFilter】中,对于非/eureka请求,比如/eureka1/apps请求,由于没有没有匹配其url模式的接口资源类,所以被当做普通静态资源的请求,由于也没有对应的资源,所以返回【404】错误。

    10、关于tomcat的过滤器链。

      由于采取了职责链设计模式,将由总链【ApplicationFilterChain】开始执行各个子过滤器,由于子过滤器持有对总链的引用,所以子过滤器执行完毕后,继续执行后续的子过滤器。当总链上的所有子过滤器都执行完毕后,将会执行【servlet instance】的方法【service】,即作为静态资源请求处理。但如果子过滤器执行完毕后不再调用总链的方法【doFilter】,则总链的子过滤器调用将中断,也意味着总链的调用完成。

    11、关于接口资源类的过滤器容器【ServletContainer】。

      在执行该容器的过滤方法【doFilter】时,如果它配置了静态资源的url模式且当前请求正好符合,则通过方法【chain.doFilter】继续回到总链执行后续子过滤器。

       当请求不符合静态资源的url模式模式时,将通过方法【service】找到请求路径在接口资源类中对应的方法并执行,执行完成后将不再执行总链的【doFilter】方法即终止执行总链的后续子过滤器。如果在接口资源类中未找到对应的方法,则返回的【status】为404,如果【forwardOn404】为true则还需要继续执行总链的【chain.doFilter】方法。

     

  • 相关阅读:
    小结一下在函数使用的时候加括号和不加括号的区别
    总结一下
    JavaScript中操作有些DOM时关于文本节点和元素节点的问题。
    HP DL388 gen9服务器安装RHEL 6.5系统
    第一次经历黑客攻击服务器系统
    小红帽5.9 配置静态IP上网问题
    redhat linux enterprise 5 输入ifconfig无效的解决方法
    关于将一台电脑分割成2个独立运行个体的测试...(1)
    Ubuntu 小白安装血泪史
    RHL 6.0学习日记, 先记下来,以后整理。
  • 原文地址:https://www.cnblogs.com/StarkBrothers/p/11974026.html
Copyright © 2011-2022 走看看