微服务Zuul网关实现服务降级

秒速五厘米 2023-07-02 08:27 75阅读 0赞

spring boot版本:2.1.10.RELEASE

1、项目搭建

所需依赖及项目的搭建请参考上一篇博客 微服务中网关的作用及搭建

2、添加fallback的bean

在spring boot 2.0之前实现的是 ZuulFallbackProvider接口,但是在spring boot 2.0之后实现的是 FallbackProvider 接口。

  1. package com.ebook.zuul.fallback;
  2. import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
  3. import org.springframework.http.HttpHeaders;
  4. import org.springframework.http.HttpStatus;
  5. import org.springframework.http.MediaType;
  6. import org.springframework.http.client.ClientHttpResponse;
  7. import org.springframework.stereotype.Component;
  8. import java.io.ByteArrayInputStream;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.nio.charset.Charset;
  12. /**
  13. * @author:JZ
  14. * @date:2020/1/28
  15. */
  16. @Component
  17. public class ProductFallbackProvider implements FallbackProvider {
  18. /**
  19. * 返回的是服务的路由,即服务的名称,
  20. * 代表为哪个服务提供fallback
  21. * @return
  22. */
  23. @Override
  24. public String getRoute() {
  25. return "ebook-product-core";
  26. }
  27. @Override
  28. public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
  29. return new ClientHttpResponse() {
  30. @Override
  31. public HttpHeaders getHeaders() {
  32. HttpHeaders header = new HttpHeaders();
  33. MediaType mt = new MediaType("application", "json", Charset.forName("UTF-8"));
  34. header.setContentType(mt);
  35. return header;
  36. }
  37. @Override
  38. public InputStream getBody() throws IOException {
  39. String input="商品服务不可用,请联系管理员!";
  40. return new ByteArrayInputStream(input.getBytes());
  41. }
  42. @Override
  43. public HttpStatus getStatusCode() throws IOException {
  44. //HttpResponse的fallback的状态码,HttpStatus值
  45. return HttpStatus.OK;
  46. }
  47. @Override
  48. public int getRawStatusCode() throws IOException {
  49. //HttpResponse的fallback的状态码,int值
  50. return this.getStatusCode().value();
  51. }
  52. @Override
  53. public String getStatusText() throws IOException {
  54. //HttpResponse的fallback的状态码,string
  55. return this.getStatusCode().getReasonPhrase();
  56. }
  57. @Override
  58. public void close() {
  59. }
  60. };
  61. }
  62. }

发表评论

表情:
评论列表 (有 0 条评论,75人围观)

还没有评论,来说两句吧...

相关阅读

    相关 服务:SpringCloud zuul

    一、存在的问题 在之前的文章中,微服务架构已经初具雏形。但还有一些问题:不同的微服务一般会有不同的网 络地址,客户端在访问这些微服务时必须记住几十甚至几百个地址,这对于客

    相关 Zuul服务

    微服务调用过程     前面的博客文章已经介绍过spring cloud的服务的相关内容信息,那么我们回顾一下多个微服务的调用过程。微服务一般会由不同的团队去维护,,那么