西安借贷购物网站建设.net美食网站开发源代码
西安借贷购物网站建设,.net美食网站开发源代码,网站信息化建设建议书,东莞市网站seo内容优化Zuul 作为路由网关组件#xff0c;在微服务架构中有着非常重要的作用#xff0c;主要体现在以下 6 个方面#xff1a; Zuul, Ribbon 以及 Eureka 相结合#xff0c;可以实现智能路由和负载均衡的功能#xff0c;Zuul 能够将请求流量按某种策略分发到集群状态的多个服务实例… Zuul 作为路由网关组件在微服务架构中有着非常重要的作用主要体现在以下 6 个方面 Zuul, Ribbon 以及 Eureka 相结合可以实现智能路由和负载均衡的功能Zuul 能够将请求流量按某种策略分发到集群状态的多个服务实例网关将所有服务的 API 接口统一聚合并统一对外暴露。外界系统调用 API 接口时都是由网关对外暴露的 API 接口外界系统不需要知道微服务系统中各服务相互调用的复杂性。微服务系统也保护了其内部微服务单元的 API 接口 防止其被外界直 接调用导致服务的敏感信息对外暴露网关服务可以做用户身份认证和权限认证防止非法请求操作 API 接口对服务器起到保护作用网关可以实现监控功能实时日志输出对请求进行记录网关可以用来实现流量监控在高流量的情况下对服务进行降级API 接口从内部服务分离出来方便做测试Zuul 的核心是一系列过滤器可以在 Http 请求的发起和响应返回期间执行一系列的过滤器 PRE 过滤器在请求路由到具体的服务之前执行这种类型的过滤器可以做安全验证例如身份验证、 参数验证等ROUTING 过滤器用于将请求路由到具体的微服务实例。在默认情况下它使用 Http Client 进行网络请求POST 过滤器在请求己被路由到微服务后执行。 一般情况下用作收集统计 信息、指标以及将响应传输到客户端ERROR 过滤器在其他过滤器发生错误时执行Zuul 采取了动态读取、编译和运行这些过滤器。过滤器之间不能直接相互通信而是通过 RequestContext 对象来共享数据每个请求都会创建一个 RequestContext 对象。Zuul 过滤器具有以下关键特性 Type (类型): Zuul 过滤器的类型这个类型决定了过滤器在请求的哪个阶段起作用例如 Pre、Post 阶段等Execution Order (执行顺序): 规定了过滤器的执行顺序Order 的值越小越先执行Criteria (标准): Filter 执行所需的条件Action (行动): 如果符合执行条件则执行 Action (即逻辑代码)使用 Zuul 新建 spring-cloud-eureka-zuul-client pom parentartifactIdspring-cloud-parent/artifactIdgroupIdcom.karonda/groupIdversion1.0.0/version
/parent
modelVersion4.0.0/modelVersionartifactIdspring-cloud-eureka-zuul-client/artifactIddependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-rest/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-zuul/artifactId/dependency
/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins
/buildapplication.yml server:port: 8051eureka:client:service-url:defaultZone: http://localhost:8001/eureka/spring:application:name: zuul-clientzuul:routes:hiapi:path: /hiapi/**serviceId: eureka-clientribbonapi:path: /ribbonapi/**serviceId: ribbon-clientfeignapi:path: /feignapi/**serviceId: feign-client启动类 EnableZuulProxy // 开启 Zuul
SpringBootApplication
public class EurekaZuulClientApp {public static void main(String[] args){SpringApplication.run(EurekaZuulClientApp.class, args);}
}测试 启动 eureka-server启动 eureka-client (两个实例一个 8011 端口一个 8012 端口)启动 eureka-ribbon-client启动 eureka-feign-client启动 eureka-zuul-client多次访问 http://localhost:8031/hiapi/hi?namevictor 可以看到 8011 和 8012 端口交替出现 (Zuul 默认 与 Ribbon 结合实现了负载均衡) 多次访问 http://localhost:8031/ribbonapi/hi?namevictor 可以看到 8011 和 8012 端口交替出现 多次访问 http://localhost:8031/feignapi/hi?namevictor 可以看到 8011 和 8012 端口交替出现 在 Zuul 上配置熔断器 实现 FallbackProvider 接口 Component
public class MyFallbackProvider implements FallbackProvider {Overridepublic String getRoute() {return eureka-client; // 如果所有的路由服务都加熔断功能返回 *}Overridepublic ClientHttpResponse fallbackResponse(String route, Throwable cause) {return new ClientHttpResponse() {Overridepublic HttpStatus getStatusCode() throws IOException {return HttpStatus.OK;}Overridepublic int getRawStatusCode() throws IOException {return 200;}Overridepublic String getStatusText() throws IOException {return OK;}Overridepublic void close() {}Overridepublic InputStream getBody() throws IOException {return new ByteArrayInputStream(error, fallback.getBytes());}Overridepublic HttpHeaders getHeaders() {HttpHeaders headers new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);return headers;}};}
}测试 关闭所有的 eureka-client重启 eureka-zuul-client在 Zuul 中使用过滤器 继承 ZuulFilter Component
public class MyFilter extends ZuulFilter {private static Logger logger LoggerFactory.getLogger(MyFilter.class);Overridepublic String filterType() {return PRE_TYPE;}Overridepublic int filterOrder() {return 0;}Overridepublic boolean shouldFilter() {return true;}Overridepublic Object run() throws ZuulException {RequestContext ctx RequestContext.getCurrentContext();HttpServletRequest request ctx.getRequest();Object accessToken request.getParameter(token);if(accessToken null){logger.warn(token is empty);ctx.setSendZuulResponse(false);ctx.setResponseStatusCode(401);try {ctx.getResponse().getWriter().write(token is empty);} catch (IOException e) {return null;}}logger.info(ok);return null;}
}测试 重启 eureka-zuul-client访问 http://localhost:8051/hiapi/hi?namevictor 访问 http://localhost:8051/hiapi/hi?namevictortokenxx 完整代码GitHub 本人 C# 转 Java 的 newbie, 如有错误或不足欢迎指正谢谢 转载于:https://www.cnblogs.com/victorbu/p/11017272.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89815.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!