最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot zuul實(shí)現(xiàn)網(wǎng)關(guān)的代碼

 更新時(shí)間:2018年10月19日 15:54:05   作者:張占嶺  
這篇文章主要介紹了springboot zuul實(shí)現(xiàn)網(wǎng)關(guān)的代碼,在為服務(wù)架構(gòu)體系里,網(wǎng)關(guān)是非常重要的環(huán)節(jié),他實(shí)現(xiàn)了很多功能,具體哪些功能大家跟隨小編一起通過本文學(xué)習(xí)吧

網(wǎng)關(guān)在微服務(wù)里的角色

在微服務(wù)架構(gòu)體系里,網(wǎng)關(guān)是非常重要的一個(gè)環(huán)節(jié),它主要實(shí)現(xiàn)了一些功能的統(tǒng)一處理,包括了:

  1. 統(tǒng)一授權(quán)
  2. 統(tǒng)一異常處理
  3. 路由導(dǎo)向
  4. 跨域處理
  5. 限流

實(shí)踐一下

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服務(wù)
    serviceId: lind
 add-host-header: true #顯示真實(shí)的http頭
 retryable: false #關(guān)閉Hystrix的重試功能
 ratelimit:
  enabled: true
  # repository: REDIS
  behind-proxy: true
  policies:
    users:
     limit: 5 #限流,每分鐘請(qǐng)求5次
     refresh-interval: 60
     type:
      - user
      - origin
      - url
     #    url類型的限流就是通過請(qǐng)求路徑區(qū)分
     #    origin是通過客戶端IP地址區(qū)分
     #    user是通過授權(quán)用戶進(jìn)行區(qū)分,也包括匿名用戶

3 添加實(shí)現(xiàn)代碼

http攔截器,獲取用戶ID,為子服務(wù)進(jìn)行傳遞

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");//向子系統(tǒng)http頭寫數(shù)據(jù)
   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;
 }
}

在主程中注入這個(gè)過濾器

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

4 使用它

在URL上通過localhost:8300/users/home 將進(jìn)行l(wèi)ind服務(wù)里的home控制器下,并在http頭上寫入了userid和username這個(gè)鍵值對(duì)!

總結(jié)

以上所述是小編給大家介紹的springboot zuul實(shí)現(xiàn)網(wǎng)關(guān),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

沙洋县| 丹棱县| 东乡| 武宣县| 昌邑市| 滨州市| 广西| 乌兰察布市| 札达县| 连云港市| 纳雍县| 聂拉木县| 云安县| 翁牛特旗| 敦化市| 伊宁市| 本溪| 沧源| 许昌市| 许昌市| 湛江市| 金华市| 江源县| 闵行区| 乐东| 手游| 德保县| 花莲市| 桑植县| 江城| 鄂尔多斯市| 宁南县| 清水县| 徐州市| 永仁县| 林甸县| 二连浩特市| 尉犁县| 延长县| 陇南市| 木里|