中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在springboot中使用zuul實現網關

發布時間:2021-05-27 17:27:06 來源:億速云 閱讀:229 作者:Leah 欄目:編程語言

如何在springboot中使用zuul實現網關?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1 添加依賴

dependencies {
  implementation('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
  implementation('org.springframework.cloud:spring-cloud-starter-netflix-zuul')
  testImplementation('org.springframework.boot:spring-boot-starter-test')
  implementation('com.marcosbarbero.cloud:spring-cloud-zuul-ratelimit:1.3.2.RELEASE')
}

2 添加yml

server:
 port: 8300
spring:
 application:
  name: microservice-gateway-zuul
eureka:
 client:
  register-with-eureka: true
  fetch-registry: true
  service-url:
   defaultZone: http://localhost:6761/eureka
 instance:
  ip-address: true
zuul:
 routes:
  users:
    path: /lind/** #以lind開頭的路徑被重定向到lind服務
    serviceId: lind
 add-host-header: true #顯示真實的http頭
 retryable: false #關閉Hystrix的重試功能
 ratelimit:
  enabled: true
  # repository: REDIS
  behind-proxy: true
  policies:
    users:
     limit: 5 #限流,每分鐘請求5次
     refresh-interval: 60
     type:
      - user
      - origin
      - url
     #    url類型的限流就是通過請求路徑區分
     #    origin是通過客戶端IP地址區分
     #    user是通過授權用戶進行區分,也包括匿名用戶

3 添加實現代碼

http攔截器,獲取用戶ID,為子服務進行傳遞

public class PreRequestLogFilter extends ZuulFilter {
 private static final Logger logger = LoggerFactory.getLogger(PreRequestLogFilter.class);
 private final RateLimiter rateLimiter = RateLimiter.create(1000.0);
 @Override
 public Object run() {
  try {
   RequestContext currentContext = RequestContext.getCurrentContext();
   HttpServletResponse response = currentContext.getResponse();
   HttpServletRequest reqeust = currentContext.getRequest();
   currentContext.addZuulRequestHeader("userId","123");//向子系統http頭寫數據
   currentContext.addZuulRequestHeader("userName","test");
   PreRequestLogFilter.logger.info(
     String.format("send %s request to %s",
       reqeust.getMethod(),
       reqeust.getRequestURL().toString()));
   if (!rateLimiter.tryAcquire()) {
    HttpStatus httpStatus = HttpStatus.TOO_MANY_REQUESTS;
    response.setContentType(MediaType.TEXT_PLAIN_VALUE);
    response.setStatus(httpStatus.value());
    response.getWriter().append(httpStatus.getReasonPhrase());
    currentContext.setSendZuulResponse(false);
    throw new ZuulException(
      httpStatus.getReasonPhrase(),
      httpStatus.value(),
      httpStatus.getReasonPhrase()
    );
   }
  } catch (java.lang.Exception e) {
   ReflectionUtils.rethrowRuntimeException(e);
  }
  return null;
 }
 @Override
 public boolean shouldFilter() {
  // 判斷是否需要過濾
  return true;
 }
 @Override
 public String filterType() {
  return FilterConstants.PRE_TYPE;
 }
 @Override
 public int filterOrder() {
  return Ordered.HIGHEST_PRECEDENCE;
 }
}

在主程中注入這個過濾器

@Bean
 public PreRequestLogFilter preRequestLogFilter() {
  return new PreRequestLogFilter();
 }

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂州市| 道孚县| 渭源县| 兴业县| 蒙城县| 肇庆市| 河北区| 云霄县| 宁都县| 祥云县| 奎屯市| 闽清县| 苍溪县| 巴马| 富锦市| 成都市| 泸西县| 通辽市| 武城县| 永修县| 韶山市| 栖霞市| 济南市| 江陵县| 永春县| 东光县| 沙田区| 宜章县| 蛟河市| 易门县| 宁远县| 黔南| 南雄市| 凉城县| 阳山县| 汶上县| 门头沟区| 孟州市| 扶风县| 延寿县| 海南省|