日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用springcloud gateway搭建网关(分流,限流,熔断)

發布時間:2025/3/14 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用springcloud gateway搭建网关(分流,限流,熔断) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring Cloud Gateway

Spring Cloud Gateway 是 Spring Cloud 的一個全新項目,該項目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術開發的網關,它旨在為微服務架構提供一種簡單有效的統一的 API 路由管理方式。

Spring Cloud Gateway 作為 Spring Cloud 生態系統中的網關,目標是替代 Netflix Zuul,其不僅提供統一的路由方式,并且基于 Filter 鏈的方式提供了網關基本的功能,例如:安全,監控/指標,和限流。

相關概念:

  • Route(路由):這是網關的基本構建塊。它由一個 ID,一個目標 URI,一組斷言和一組過濾器定義。如果斷言為真,則路由匹配。
  • Predicate(斷言):這是一個 Java 8 的 Predicate。輸入類型是一個 ServerWebExchange。我們可以使用它來匹配來自 HTTP 請求的任何內容,例如 headers 或參數。
  • Filter(過濾器):這是org.springframework.cloud.gateway.filter.GatewayFilter的實例,我們可以使用它修改請求和響應。

工作流程:

客戶端向 Spring Cloud Gateway 發出請求。如果 Gateway Handler Mapping 中找到與請求相匹配的路由,將其發送到 Gateway Web Handler。Handler 再通過指定的過濾器鏈來將請求發送到我們實際的服務執行業務邏輯,然后返回。 過濾器之間用虛線分開是因為過濾器可能會在發送代理請求之前(“pre”)或之后(“post”)執行業務邏輯。

Spring Cloud Gateway 的特征:

  • 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
  • 動態路由
  • Predicates 和 Filters 作用于特定路由
  • 集成 Hystrix 斷路器
  • 集成 Spring Cloud DiscoveryClient
  • 易于編寫的 Predicates 和 Filters
  • 限流
  • 路徑重寫

?快速上手

引入spring-boot??2.1.1.RELEASE ,springcloud的版本為?Greenwich.M3

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.version><spring-cloud.version>Greenwich.M3</spring-cloud.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

?添加的依賴包如下

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId></dependency>

?注意springcloud gateway使用的web框架為webflux,和springMVC不兼容。引入的限流組件是hystrix。redis底層不再使用jedis,而是lettuce。

路由斷言

?接下來就是配置了,可以使用java代碼硬編碼配置路由過濾器,也可以使用yml配置文件配置。下面我們首先介紹配置文件配置方式

application.yml

server.port: 8082spring:application:name: gatewaycloud:gateway:routes:- id: path_routeuri: http://localhost:8000order: 0predicates:- Path=/foo/**filters:- StripPrefix=1

?上面給出了一個根據請求路徑來匹配目標uri的例子,如果請求的路徑為/foo/bar,則目標uri為?http://localhost:8000/bar。如果上面例子中沒有加一個StripPrefix=1過濾器,則目標uri 為http://localhost:8000/foo/bar,StripPrefix過濾器是去掉一個路徑。

?其他的路由斷言和過濾器使用方法請查看官網

?https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.1.0.RC2/single/spring-cloud-gateway.html#gateway-how-it-works

?接下來我們來看一下設計一個網關應該需要的一些功能

修改接口返回報文

因為網關路由的接口返回報文格式各異,并且網關也有有一些限流、認證、熔斷降級的返回報文,為了統一這些報文的返回格式,網關必須要對接口的返回報文進行修改,過濾器代碼如下:

package org.gateway.filter.global;import java.nio.charset.Charset;import org.gateway.response.Response; import org.reactivestreams.Publisher; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponseDecorator; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange;import com.alibaba.fastjson.JSON;import reactor.core.publisher.Flux; import reactor.core.publisher.Mono;@Component public class WrapperResponseFilter implements GlobalFilter, Ordered {@Overridepublic int getOrder() {// -1 is response write filter, must be called before thatreturn -2;}@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpResponse originalResponse = exchange.getResponse();DataBufferFactory bufferFactory = originalResponse.bufferFactory();ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {@Overridepublic Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {if (body instanceof Flux) {Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;return super.writeWith(fluxBody.map(dataBuffer -> {// probably should reuse buffersbyte[] content = new byte[dataBuffer.readableByteCount()];dataBuffer.read(content);// 釋放掉內存 DataBufferUtils.release(dataBuffer);String rs = new String(content, Charset.forName("UTF-8"));Response response = new Response();response.setCode("1");response.setMessage("請求成功");response.setData(rs);byte[] newRs = JSON.toJSONString(response).getBytes(Charset.forName("UTF-8"));originalResponse.getHeaders().setContentLength(newRs.length);//如果不重新設置長度則收不到消息。return bufferFactory.wrap(newRs);}));}// if body is not a flux. never got there.return super.writeWith(body);}};// replace response with decoratorreturn chain.filter(exchange.mutate().response(decoratedResponse).build());} }

?

需要注意的是order需要小于-1,需要先于NettyWriteResponseFilter過濾器執行。

有了一個這樣的過濾器,我們就可以統一返回報文格式了。

認證

以下提供一個簡單的認證過濾器

package org.gateway.filter.global;import java.nio.charset.StandardCharsets;import org.gateway.response.Response; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.HttpStatus; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange;import com.alibaba.fastjson.JSON;import reactor.core.publisher.Mono;@Component public class AuthFilter implements GlobalFilter{@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("token");if ("token".equals(token)) {return chain.filter(exchange);}ServerHttpResponse response = exchange.getResponse();Response data = new Response();data.setCode("401");data.setMessage("非法請求");byte[] datas = JSON.toJSONString(data).getBytes(StandardCharsets.UTF_8);DataBuffer buffer = response.bufferFactory().wrap(datas);response.setStatusCode(HttpStatus.UNAUTHORIZED);response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");return response.writeWith(Mono.just(buffer));} }

?

限流

springcloud gateway 為我們提供了限流過濾器RequestRateLimiterGatewayFilterFactory,和限流的實現類RedisRateLimiter使用令牌桶限流。但是官方的不一定滿足我們的需求,所以我們重新寫一個過濾器(基本和官方一致),只是將官方的返回報文改了。

package org.gateway.limiter;import java.nio.charset.StandardCharsets; import java.util.Map;import org.gateway.response.Response; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver; import org.springframework.cloud.gateway.filter.ratelimit.RateLimiter; import org.springframework.cloud.gateway.route.Route; import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.HttpStatus; import org.springframework.http.server.reactive.ServerHttpResponse;import com.alibaba.fastjson.JSON;import reactor.core.publisher.Mono;/*** User Request Rate Limiter filter. See https://stripe.com/blog/rate-limiters and*/ public class RateLimiterGatewayFilterFactory extends AbstractGatewayFilterFactory<RateLimiterGatewayFilterFactory.Config> {public static final String KEY_RESOLVER_KEY = "keyResolver";private final RateLimiter defaultRateLimiter;private final KeyResolver defaultKeyResolver;public RateLimiterGatewayFilterFactory(RateLimiter defaultRateLimiter,KeyResolver defaultKeyResolver) {super(Config.class);this.defaultRateLimiter = defaultRateLimiter;this.defaultKeyResolver = defaultKeyResolver;}public KeyResolver getDefaultKeyResolver() {return defaultKeyResolver;}public RateLimiter getDefaultRateLimiter() {return defaultRateLimiter;}@SuppressWarnings("unchecked")@Overridepublic GatewayFilter apply(Config config) {KeyResolver resolver = (config.keyResolver == null) ? defaultKeyResolver : config.keyResolver;RateLimiter<Object> limiter = (config.rateLimiter == null) ? defaultRateLimiter : config.rateLimiter;return (exchange, chain) -> {Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);return resolver.resolve(exchange).flatMap(key ->// TODO: if key is empty?limiter.isAllowed(route.getId(), key).flatMap(response -> {for (Map.Entry<String, String> header : response.getHeaders().entrySet()) {exchange.getResponse().getHeaders().add(header.getKey(), header.getValue());}if (response.isAllowed()) {return chain.filter(exchange);}ServerHttpResponse rs = exchange.getResponse();Response data = new Response();data.setCode("101");data.setMessage("訪問過快");byte[] datas = JSON.toJSONString(data).getBytes(StandardCharsets.UTF_8);DataBuffer buffer = rs.bufferFactory().wrap(datas);rs.setStatusCode(HttpStatus.UNAUTHORIZED);rs.getHeaders().add("Content-Type", "application/json;charset=UTF-8");return rs.writeWith(Mono.just(buffer));}));};}public static class Config {private KeyResolver keyResolver;private RateLimiter rateLimiter;private HttpStatus statusCode = HttpStatus.TOO_MANY_REQUESTS;public KeyResolver getKeyResolver() {return keyResolver;}public Config setKeyResolver(KeyResolver keyResolver) {this.keyResolver = keyResolver;return this;}public RateLimiter getRateLimiter() {return rateLimiter;}public Config setRateLimiter(RateLimiter rateLimiter) {this.rateLimiter = rateLimiter;return this;}public HttpStatus getStatusCode() {return statusCode;}public Config setStatusCode(HttpStatus statusCode) {this.statusCode = statusCode;return this;}}}

?然后限流必須要有一個key,根據什么來進行限流,ip,接口,或者用戶來進行限流,所以我們自定義一個KeyResolver

package org.gateway.limiter;import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver; import org.springframework.web.server.ServerWebExchange;import com.alibaba.fastjson.JSON;import reactor.core.publisher.Mono;public class CustomKeyResolver implements KeyResolver {public static final String BEAN_NAME = "customKeyResolver";@Overridepublic Mono<String> resolve(ServerWebExchange exchange) {return Mono.just(getKey(exchange));}/*** * @param exchange* @return*/private String getKey(ServerWebExchange exchange) {LimitKey limitKey = new LimitKey();limitKey.setApi(exchange.getRequest().getPath().toString());limitKey.setBiz(exchange.getRequest().getQueryParams().getFirst("biz"));return JSON.toJSONString(limitKey);} }

?最后RedisRateLimiter我們也需要重寫,因為不支持多級限流,原生的只會判斷一個key。代碼如下:

/*** This uses a basic token bucket algorithm and relies on the fact that Redis scripts* execute atomically. No other operations can run between fetching the count and* writing the new count.*/@Overridepublic Mono<Response> isAllowed(String routeId, String id) {if (!this.initialized.get()) {throw new IllegalStateException("RedisRateLimiter is not initialized");}LimitConfig limitConfig = getLimitConfig(routeId);if (limitConfig == null || limitConfig.getTokenConfig().size()==0) {return Mono.just(new Response(true,null));}Map<String, Config> conf = limitConfig.getTokenConfig();LimitKey limitKey = JSON.parseObject(id, LimitKey.class);//api限流String api = limitKey.getApi();Config apiConf = conf.get(api);//業務方限流String biz = limitKey.getBiz();Config bizConf = conf.get(biz);if (apiConf!=null) {return isSingleAllow(api,routeId,apiConf).flatMap(res -> {if (res.isAllowed()) {if(bizConf!=null) {return isSingleAllow(biz, routeId, bizConf);}else {return Mono.just(new Response(true,new HashMap<>()));}}else {return Mono.just(res);}} );}else {if (bizConf!=null) {return isSingleAllow(biz, routeId, bizConf);}else {return Mono.just(new Response(true,new HashMap<>()));}}}/*** 單級限流* @param api* @param routeId* @param apiConf* @return */private Mono<Response> isSingleAllow(String key, String routeId, Config config) {// How many requests per second do you want a user to be allowed to do?int replenishRate = config.getReplenishRate();// How much bursting do you want to allow?int burstCapacity = config.getBurstCapacity();try {List<String> keys = getKeys(routeId+"$"+key);// The arguments to the LUA script. time() returns unixtime in seconds.List<String> scriptArgs = Arrays.asList(replenishRate + "", burstCapacity + "",Instant.now().getEpochSecond() + "", "1");// allowed, tokens_left = redis.eval(SCRIPT, keys, args)Flux<List<Long>> flux = this.redisTemplate.execute(this.script, keys, scriptArgs);// .log("redisratelimiter", Level.FINER);return flux.onErrorResume(throwable -> Flux.just(Arrays.asList(1L, -1L))).reduce(new ArrayList<Long>(), (longs, l) -> {longs.addAll(l);return longs;}) .map(results -> {boolean allowed = results.get(0) == 1L;Long tokensLeft = results.get(1);Response response = new Response(allowed, getHeaders(config, tokensLeft));if (log.isDebugEnabled()) {log.debug("response: " + response);}return response;});}catch (Exception e) {/** We don't want a hard dependency on Redis to allow traffic. Make sure to set* an alert so you know if this is happening too much. Stripe's observed* failure rate is 0.01%.*/log.error("Error determining if user allowed from redis", e);}return Mono.just(new Response(true, getHeaders(config, -1L)));}private LimitConfig getLimitConfig(String routeId) {Map<String, LimitConfig> map = new HashMap<>();LimitConfig limitConfig = new LimitConfig();limitConfig.setRouteId("rateLimit_route");Map<String, Config> tokenMap = new HashMap<>();Config apiConfig = new Config();apiConfig.setBurstCapacity(5);apiConfig.setReplenishRate(5);Config bizConfig = new Config();bizConfig.setBurstCapacity(1);bizConfig.setReplenishRate(1);tokenMap.put("/hello/rateLimit", apiConfig);tokenMap.put("jieyin", bizConfig);limitConfig.setTokenConfig(tokenMap);map.put("rateLimit_route", limitConfig);return limitConfig;}

?如上的代碼是寫死的,但是我們可以根據我們的業務需求設計一個自定義key,自定義令牌桶容量和速率的限流規則。

bean配置和yml配置如下

@Bean@Primarypublic CustomRedisRateLimiter customRedisRateLimiter(ReactiveRedisTemplate<String, String> redisTemplate,@Qualifier(RedisRateLimiter.REDIS_SCRIPT_NAME) RedisScript<List<Long>> redisScript,Validator validator) {return new CustomRedisRateLimiter(redisTemplate, redisScript, validator);}@Beanpublic RateLimiterGatewayFilterFactory rateLimiterGatewayFilterFactory(CustomRedisRateLimiter customRedisRateLimiter, CustomKeyResolver customKeyResolver) {return new RateLimiterGatewayFilterFactory(customRedisRateLimiter, customKeyResolver);} server.port: 8082spring:application:name: gatewayredis:host: localhostport: 6379password: 123456cloud:gateway:routes:- id: rateLimit_routeuri: http://localhost:8000order: 0predicates:- Path=/foo/**filters:- StripPrefix=1- name: RateLimiter

熔斷

? ? ? 當下游接口負載很大,或者接口不通等其他原因導致超時,如果接口不熔斷的話將會影響到下游接口得不到喘息,網關也會因為超時連接一直掛起,很可能因為一個子系統的問題導致整個系統的雪崩。所以我們的網關需要設計熔斷,當因為熔斷器打開時,網關將返回一個降級的應答。

熔斷配置如下:

server.port: 8082spring:application:name: gatewayredis:host: localhostport: 6379password: 123456cloud:gateway:routes:- id: rateLimit_routeuri: http://localhost:8000order: 0predicates:- Path=/foo/**filters:- StripPrefix=1- name: RateLimiter- name: Hystrixargs:name: fallbackcmdfallbackUri: forward:/fallback

? hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds: 5000

package org.gateway.controller;import org.gateway.response.Response; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class FallbackController {@GetMapping("/fallback")public Response fallback() {Response response = new Response();response.setCode("100");response.setMessage("服務暫時不可用");return response;} }

?

注意需要設置commandKey的超時時間。其他的hystrix配置請訪問Hystrix wiki.

動態配置路由和過濾器

最后我們來看一下如何動態配置路由和過濾器。

定義路由實體

/*** Gateway的路由定義模型*/ public class GatewayRouteDefinition {/*** 路由的Id*/private String id;/*** 路由斷言集合配置*/private List<GatewayPredicateDefinition> predicates = new ArrayList<>();/*** 路由過濾器集合配置*/private List<GatewayFilterDefinition> filters = new ArrayList<>();/*** 路由規則轉發的目標uri*/private String uri;/*** 路由執行的順序*/private int order = 0; }

?

路由斷言實體

/*** 路由斷言定義模型*/ public class GatewayPredicateDefinition {/*** 斷言對應的Name*/private String name;/*** 配置的斷言規則*/private Map<String, String> args = new LinkedHashMap<>();
}

?

過濾器實體

/*** 過濾器定義模型*/ public class GatewayFilterDefinition {/*** Filter Name*/private String name;/*** 對應的路由規則*/private Map<String, String> args = new LinkedHashMap<>(); }

?

路由增刪改controller

package org.gateway.controller;import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map;import org.gateway.model.GatewayFilterDefinition; import org.gateway.model.GatewayPredicateDefinition; import org.gateway.model.GatewayRouteDefinition; import org.gateway.route.DynamicRouteServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.filter.FilterDefinition; import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.util.UriComponentsBuilder;@RestController @RequestMapping("/route") public class RouteController {@Autowiredprivate DynamicRouteServiceImpl dynamicRouteService;/*** 增加路由* @param gwdefinition* @return*/@PostMapping("/add")public String add(@RequestBody GatewayRouteDefinition gwdefinition) {try {RouteDefinition definition = assembleRouteDefinition(gwdefinition);return this.dynamicRouteService.add(definition);} catch (Exception e) {e.printStackTrace();}return "succss";}@GetMapping("/delete/{id}")public String delete(@PathVariable String id) {return this.dynamicRouteService.delete(id);}@PostMapping("/update")public String update(@RequestBody GatewayRouteDefinition gwdefinition) {RouteDefinition definition = assembleRouteDefinition(gwdefinition);return this.dynamicRouteService.update(definition);}private RouteDefinition assembleRouteDefinition(GatewayRouteDefinition gwdefinition) {RouteDefinition definition = new RouteDefinition();List<PredicateDefinition> pdList=new ArrayList<>();definition.setId(gwdefinition.getId());List<GatewayPredicateDefinition> gatewayPredicateDefinitionList=gwdefinition.getPredicates();for (GatewayPredicateDefinition gpDefinition: gatewayPredicateDefinitionList) {PredicateDefinition predicate = new PredicateDefinition();predicate.setArgs(gpDefinition.getArgs());predicate.setName(gpDefinition.getName());pdList.add(predicate);}List<GatewayFilterDefinition> gatewayFilterDefinitions = gwdefinition.getFilters();List<FilterDefinition> filterList = new ArrayList<>();if (!CollectionUtils.isEmpty(gatewayFilterDefinitions)) {for (GatewayFilterDefinition gatewayFilterDefinition : gatewayFilterDefinitions) {FilterDefinition filterDefinition = new FilterDefinition();filterDefinition.setName(gatewayFilterDefinition.getName());filterDefinition.setArgs(gatewayFilterDefinition.getArgs());filterList.add(filterDefinition);}}definition.setPredicates(pdList);definition.setFilters(filterList);URI uri = UriComponentsBuilder.fromHttpUrl(gwdefinition.getUri()).build().toUri();definition.setUri(uri);return definition;} }

?動態路由service?

package org.gateway.route;import java.net.URI; import java.util.Arrays; import java.util.HashMap; import java.util.Map;import org.gateway.model.GatewayPredicateDefinition; import org.gateway.model.GatewayRouteDefinition; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.event.RefreshRoutesEvent; import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionWriter; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.stereotype.Service; import org.springframework.web.util.UriComponentsBuilder;import com.alibaba.fastjson.JSON;import reactor.core.publisher.Mono;@Service public class DynamicRouteServiceImpl implements ApplicationEventPublisherAware {@Autowiredprivate RouteDefinitionWriter routeDefinitionWriter;private ApplicationEventPublisher publisher;/*** 增加路由* @param definition* @return*/public String add(RouteDefinition definition) {routeDefinitionWriter.save(Mono.just(definition)).subscribe();this.publisher.publishEvent(new RefreshRoutesEvent(this));return "success";}/*** 更新路由* @param definition* @return*/public String update(RouteDefinition definition) {try {this.routeDefinitionWriter.delete(Mono.just(definition.getId()));} catch (Exception e) {return "update fail,not find route routeId: "+definition.getId();}try {routeDefinitionWriter.save(Mono.just(definition)).subscribe();this.publisher.publishEvent(new RefreshRoutesEvent(this));return "success";} catch (Exception e) {return "update route fail";}}/*** 刪除路由* @param id* @return*/public String delete(String id) {try {this.routeDefinitionWriter.delete(Mono.just(id));return "delete success";} catch (Exception e) {e.printStackTrace();return "delete fail";}}@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.publisher = applicationEventPublisher;} }

?

?上面 routeDefinitionWriter的實現默認是InMemoryRouteDefinitionRepository,將路由存在內存中,我們可以自己實現一個將路由存在redis中的repository。 this.publisher.publishEvent(new RefreshRoutesEvent(this));則會將CachingRouteLocator中的路由緩存清空。
以上只是springcloud gateway支持的一小部分功能。

雖然springcloud gateway 才發布不久,相關的文檔還不是很完善,代碼中充滿了TODO的地方,react代碼友好性低。但是由于它的高性能而且是spring自己的框架,未來取代zuul不是沒有可能。

轉載于:https://www.cnblogs.com/qianwei/p/10127700.html

總結

以上是生活随笔為你收集整理的使用springcloud gateway搭建网关(分流,限流,熔断)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

激情图片qvod | 欧美激情综合五月色丁香 | 中文在线最新版天堂 | 色婷婷av一区二 | www.综合网.com | 亚洲,播放| 亚洲午夜精品久久久久久久久久久久 | 在线中文字幕av观看 | 欧美极品少妇xbxb性爽爽视频 | 中文字幕在线观看视频网站 | 国产91在线免费视频 | 这里只有精品视频在线观看 | 日日日操操 | 激情图片久久 | 激情图片久久 | 国产日韩欧美精品在线观看 | 97色免费视频 | 中文字幕av在线 | 99免在线观看免费视频高清 | 欧美精品亚州精品 | 国产97在线视频 | 91一区在线观看 | 亚洲精品合集 | 欧美日韩免费观看一区=区三区 | 免费性网站 | 国产精品午夜在线 | av在线免费观看不卡 | 综合视频在线 | 在线一区电影 | 久久一级电影 | www.久热| 欧美另类美少妇69xxxx | 97精品在线视频 | 久久综合综合久久综合 | 久久午夜色播影院免费高清 | 久草视频观看 | 黄色免费看片网站 | 在线看v片 | 中国一级特黄毛片大片久久 | 国产一级片不卡 | 91综合久久一区二区 | 超级碰碰碰免费视频 | 欧美在线观看视频一区二区 | 日韩久久精品一区二区 | 日本中文乱码卡一卡二新区 | 日韩精品免费专区 | 亚洲va在线va天堂va偷拍 | 精品国产免费看 | 久二影院 | 亚色视频在线观看 | 精品国产综合区久久久久久 | 免费99精品国产自在在线 | 黄色日本免费 | 中中文字幕av在线 | 欧美日韩有码 | 91精品麻豆 | 国产一级久久久 | 国产操在线 | 久久久免费看 | 98涩涩国产露脸精品国产网 | 国产h在线观看 | av手机在线播放 | 日韩视频一区二区 | 国产午夜一区二区 | 国产五月婷 | 欧美日韩免费一区二区 | 欧美在线日韩在线 | 91视频成人免费 | 久久久久久久久久久久久影院 | 伊人一级| 亚洲国内精品 | 亚洲免费视频在线观看 | 日日夜夜艹 | 国产精品一区在线观看 | 在线天堂8√ | 久久精品网站免费观看 | 欧美午夜理伦三级在线观看 | 国内精品视频久久 | 精品国产美女 | 亚洲毛片在线观看. | 黄色三级视频片 | 夜夜夜夜夜夜操 | 99视频黄| 激情视频在线观看网址 | 91九色在线视频 | 亚洲国产精品va在线看黑人 | 久久久精品久久日韩一区综合 | 91热爆在线观看 | 欧美色图一区 | 午夜视频二区 | 久久久久久视频 | 精品国产一区二区三区日日嗨 | 精品v亚洲v欧美v高清v | 国产一区二区精品在线 | 精品中文字幕在线观看 | 国产精品嫩草69影院 | 久久久久成人精品 | 亚洲aⅴ一区二区三区 | 精品中文字幕在线 | 欧美成人xxxx | 日韩激情一二三区 | 伊人天堂av | 成人av日韩 | 国产精品第54页 | 欧美黄色成人 | 久久高清国产视频 | 国产高清av | 亚洲五月综合 | 亚洲成成品网站 | 日韩大片免费观看 | 日韩色视频在线观看 | 在线观看一区二区精品 | 色婷婷视频在线观看 | 国产字幕在线看 | 国产亚洲午夜高清国产拍精品 | www.伊人网 | 国产成人精品一区二区三区网站观看 | 欧美人人爱 | 中文字幕制服丝袜av久久 | 99久久精品久久久久久动态片 | 国产一区视频在线 | 九九视频免费观看视频精品 | www.狠狠| 噜噜色官网 | 天天操天天谢 | 久久精品视频观看 | 久久在草 | 日韩a级黄色片 | 99爱这里只有精品 | 黄色小视频在线观看免费 | 精品成人久久 | 天天曰天天爽 | 日本性动态图 | 91最新在线观看 | 欧美日本日韩aⅴ在线视频 插插插色综合 | av网站在线观看播放 | 激情五月开心 | 欧美成人91 | 日韩精品一区二区在线观看视频 | 91亚洲在线观看 | 亚洲精品视频免费观看 | 免费a网站 | 国产精品一区二区三区久久久 | 久久97超碰 | 国产成人精品一区二区三区免费 | 日韩精品免费在线 | 午夜在线看片 | 中文字幕日本特黄aa毛片 | 四虎国产精品成人免费影视 | 亚洲精品视频中文字幕 | 综合网天天射 | 狠狠色丁香婷婷综合欧美 | 天天伊人狠狠 | 四季av综合网站 | 亚洲一级理论片 | 99在线免费观看 | 中文字幕一区二区三区乱码在线 | 国产日韩三级 | 国产精品久久久久久久久免费 | 99c视频在线 | 日韩天堂网 | 手机在线看片日韩 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 免费看的黄色 | 免费国产在线精品 | 不卡的一区二区三区 | 国产69久久精品成人看 | 美女一级毛片视频 | 99精品国产一区二区三区不卡 | 91在线精品一区二区 | 波多野结衣电影一区二区 | japanesexxx乱女另类 | 国产黄色片久久 | 欧美日韩精品在线视频 | 91在线精品一区二区 | 亚洲日韩精品欧美一区二区 | 国产字幕在线观看 | 天天干夜夜爱 | 亚洲日本黄色 | 亚洲免费在线视频 | 国产精品观看在线亚洲人成网 | 在线观看亚洲专区 | 国产一区在线视频观看 | 天堂久色 | 欧美性色综合网站 | 免费黄a大片 | 很黄很色很污的网站 | 在线观看 国产 | 欧美精品视 | 久久婷婷一区二区三区 | 中文字幕在线视频一区 | 97在线免费视频观看 | 久久久久久久久久久免费 | 成人免费视频免费观看 | 69亚洲精品 | 免费看一级黄色 | 激情欧美一区二区三区免费看 | freejavvideo日本免费 | 美女视频网站久久 | av在线免费不卡 | 久久久国产精品人人片99精片欧美一 | 日韩中文字幕在线观看 | 97超碰人人干 | av丝袜制服 | av解说在线 | 国产在线高清精品 | 久久久午夜精品福利内容 | 国产一线天在线观看 | 伊人中文字幕在线 | 中文字幕日韩精品有码视频 | 国内精品久久久久影院男同志 | 草免费视频 | 最近日本韩国中文字幕 | 999视频网 | 中文字幕免费成人 | 久久久精品二区 | 国产一区二区电影在线观看 | 国产免费黄视频在线观看 | 成人网在线免费视频 | av成人在线播放 | 欧亚久久| 99热这里只有精品免费 | 天天色视频 | 黄色av高清 | 久久免费试看 | 成人高清av在线 | 色干综合| 日日添夜夜添 | 国产剧情在线一区 | 久草视频视频在线播放 | 色久网| 国产中文字幕视频在线 | 色搞搞 | 久久久国产电影 | 亚洲成人av片在线观看 | 激情视频免费在线 | 97超碰国产精品女人人人爽 | 97超级碰碰| 国产欧美综合在线观看 | 免费在线观看国产精品 | 国产精品第52页 | 欧美性色黄| 九九热1| 麻花豆传媒mv在线观看 | 久久精品资源 | 国产免费精彩视频 | 天堂网在线视频 | 在线视频一区二区 | 91中文字幕永久在线 | 久久精品精品电影网 | 免费看片网页 | 国产123区在线观看 国产精品麻豆91 | 黄网站免费看 | 国产精品久久久久久电影 | 欧洲亚洲精品 | 国产成人精品久久久 | 伊人导航| 欧美韩日精品 | 亚洲成人影音 | 一区二区视频免费在线观看 | 天天天干天天天操 | 免费av看片| 97超碰人人澡人人爱学生 | 久久精品一区二区三区视频 | 免费看片在线观看 | 五月综合激情婷婷 | 成人黄色av网站 | 日本午夜在线亚洲.国产 | 国产日韩欧美在线观看视频 | 日韩欧美成 | 日韩欧美一区二区三区视频 | 国产精品小视频网站 | 欧美性生交大片免网 | 成人在线视频论坛 | 成年人免费电影 | 丰满少妇对白在线偷拍 | 日韩一区正在播放 | 亚洲另类视频在线 | 综合网五月天 | 亚洲一区 av | 中文字幕国产一区 | 国产精品网址在线观看 | 久久精品区 | 国产在线第三页 | 婷婷伊人综合亚洲综合网 | 在线观看亚洲视频 | 成人宗合网 | 91视频高清完整版 | 伊人色播| www.com.日本一级| 欧美午夜寂寞影院 | 狠狠操影视 | 国产福利精品一区二区 | 久久久影片 | 国产一级做a爱片久久毛片a | 亚洲 成人 欧美 | 久久噜噜少妇网站 | 国产高清免费 | 麻豆国产视频下载 | 天天躁日日躁狠狠躁av中文 | 伊人网综合在线观看 | 成人黄在线观看 | 天天干国产| 成人av在线直播 | 久久免费中文视频 | 免费在线观看不卡av | 亚洲国内精品在线 | 久久人人爽人人片av | 日韩精品久久久久久久电影竹菊 | 亚洲精品激情 | 精品视频网站 | 深夜福利视频一区二区 | 一色av| 国产视频在线观看一区 | 欧美成人视 | 国产伦理一区 | 欧美日韩高清免费 | 国内99视频 | 久草www| 中文字幕电影高清在线观看 | 久久精品男人的天堂 | av日韩不卡 | 成人黄色影片在线 | 日韩va亚洲va欧美va久久 | 97视频网址 | 国产精品一区二区三区99 | 亚洲三级在线免费观看 | 亚洲影视九九影院在线观看 | 精品国产黄色片 | 免费 在线 中文 日本 | 欧美福利网址 | 国产精品99久久久久久久久 | a在线观看免费视频 | 探花视频在线观看+在线播放 | 日韩一区在线免费观看 | av资源在线看 | www狠狠操 | 91福利区一区二区三区 | 精品视频免费 | 亚洲成人家庭影院 | 日韩三级av| 中文理论片 | 久久综合久久综合久久 | 96av麻豆蜜桃一区二区 | 久久久久久久久毛片精品 | 4438全国亚洲精品观看视频 | 久久久久久久久久久免费视频 | 久久免费黄色大片 | 精品一区二区免费在线观看 | 亚洲综合在线观看视频 | 国产精品黄色在线观看 | 精品9999| 国产精品久久久久久一区二区三区 | 国产成人一区二区三区在线观看 | 在线观看精品黄av片免费 | 麻豆一区二区三区视频 | 成人精品一区二区三区中文字幕 | 99热999| 久草视频免费播放 | 亚洲码国产日韩欧美高潮在线播放 | 日日夜夜天天久久 | 日韩三级免费观看 | 91成年人在线观看 | 亚洲闷骚少妇在线观看网站 | 中文字幕一区二 | 亚洲美女精品视频 | 成人免费av电影 | 国产四虎在线 | 亚洲精品黄色在线观看 | 日韩视频免费在线 | 日本xxxx.com| 国产麻豆精品传媒av国产下载 | www.超碰97.com | 五月婷婷综合色拍 | 免费成人av网站 | 免费看污的网站 | www.福利| 色操插| 91网在线| 亚洲精品欧洲精品 | 色综合天天天天做夜夜夜夜做 | 中文字幕在线免费观看 | 国产精品一区二区电影 | 深夜免费网站 | 国产高清在线视频 | 在线观看视频99 | 国产精品永久 | 91男人影院 | 中文字幕888 | av黄色av| 欧美尹人| 91视频 - x99av | 五月天中文字幕mv在线 | 成人久久综合 | 97麻豆视频| 欧美一级性生活片 | www亚洲精品 | 国产玖玖在线 | 亚洲视频一区二区三区在线观看 | 国产精品久久久久久久免费大片 | 欧美一二三区在线观看 | 欧美日韩视频在线观看免费 | 国产精品视频永久免费播放 | 四虎国产视频 | 国产精品一区二区三区免费看 | 成人精品电影 | 日韩欧美一区二区三区黑寡妇 | 一区二区三区在线观看 | 欧美一级日韩三级 | 亚洲精品午夜视频 | 欧美乱大交 | 日韩系列| 四虎成人精品永久免费av | 98涩涩国产露脸精品国产网 | 91免费的视频在线播放 | 成年人在线免费看 | 久久夜色精品国产欧美一区麻豆 | 日韩精品中文字幕一区二区 | 午夜精品久久久久久99热明星 | 亚洲婷婷伊人 | 亚洲欧美日韩精品一区二区 | 在线韩国电影免费观影完整版 | 国产日韩欧美在线一区 | 一区二区欧美激情 | 一区二区三区高清在线观看 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 在线观看视频免费大全 | 亚洲国产精品资源 | a在线v | 亚洲中字幕 | 亚洲国产婷婷 | 经典三级一区 | 视频一区在线免费观看 | 亚洲精品国产拍在线 | 中文字幕 国产 一区 | 中文字幕一区二 | 色亚洲激情 | 日韩在线三级 | 嫩小bbbb摸bbb摸bbb | 日韩草比 | 99久久精品国 | 日日狠狠| 91大神视频网站 | 99精品热视频 | 亚洲精品成人 | 国产中文自拍 | 欧美日韩在线精品一区二区 | 国产看片 色 | 99热九九这里只有精品10 | 成人欧美一区二区三区黑人麻豆 | 亚洲欧洲av | 欧美精品久久人人躁人人爽 | 天天操婷婷 | 一区二区成人国产精品 | 97视频免费观看 | 天天摸天天操天天爽 | 成人av在线影视 | 伊人狠狠操 | 91在线精品视频 | 国产高清不卡在线 | 人人爽人人爽人人片av | 精品毛片一区二区免费看 | 波多野结衣在线视频一区 | 精品成人在线 | 欧美激情精品久久久久久变态 | 久久久久久久久久免费 | 91看片看淫黄大片 | 久久久久综合网 | 国产精品第二十页 | 天天综合亚洲 | 亚洲成色777777在线观看影院 | www色网站| 天天爽人人爽夜夜爽 | 久久精品99视频 | 天天性天天草 | www五月婷婷 | 日韩av片在线 | 99精品国产一区二区 | 精品久久久久久综合 | 国产99久久久欧美黑人 | 成人午夜电影在线观看 | 免费黄a| 欧美亚洲xxx| 91av久久 | 狠狠色网| 欧美一区二区三区免费观看 | 欧美一区二区在线免费看 | 99热在线网站| 久久久影院一区二区三区 | 欧美在线一级片 | 亚洲欧洲精品一区二区 | 色悠悠久久综合 | 免费手机黄色网址 | 中文字幕在线视频国产 | 激情综合久久 | 欧美看片| 亚洲精品高清在线观看 | 久久深夜 | 成人97视频一区二区 | 91成年人在线观看 | 99久久99久久免费精品蜜臀 | 友田真希av| 九九色网 | 久久久久日本精品一区二区三区 | 日本不卡123 | 韩国av电影网 | 国产一级久久 | 久久久精品综合 | 狠狠做深爱婷婷综合一区 | 九九热久久久 | 亚洲精品一区二区精华 | 久草精品在线观看 | 国产精品久久久久久久久久尿 | 国产一区二区久久 | 久草在线高清 | 成人影片免费 | 国产区久久 | 精品久久久久久久久久久久久久久久久久 | 国产精品国产三级国产专区53 | 99一级片| av在线免费播放网站 | 97视频在线观看免费 | 麻豆久久一区二区 | 日韩女同一区二区三区在线观看 | 午夜性盈盈 | 国产三级精品在线 | 91视频免费看片 | 日本 在线 视频 中文 有码 | 国产免费又爽又刺激在线观看 | 日韩av免费一区二区 | 最近高清中文字幕在线国语5 | 五月激情站| 又黄又刺激的视频 | 国产成人精品电影久久久 | 五月婷网站| 日本久久精品 | 日韩精品免费在线观看视频 | 成人av在线亚洲 | 国产精品美女久久久久久久网站 | 亚洲专区在线视频 | 香蕉久久久久久久 | 黄色av电影在线 | 午夜精品久久一牛影视 | 国产一区二区精品在线 | 91av国产视频 | www.夜夜操.com| 欧美日韩视频在线观看免费 | 亚洲五月 | www.天天操.com | 国产精品婷婷 | av天天澡天天爽天天av | 免费看亚洲毛片 | 一区二区伦理 | 一级片免费视频 | 国产成人三级在线观看 | 激情久久久久久久久久久久久久久久 | 日韩专区在线播放 | 久久xx视频| 欧美一区三区四区 | 国产精品成人品 | 欧美一区二区三区在线播放 | 婷婷亚洲激情 | 天堂网一区二区 | 91精品久 | 91在线一区 | 中文字幕文字幕一区二区 | 日韩精品第一区 | 国产麻豆成人传媒免费观看 | 综合色爱| 婷婷丁香在线观看 | 精品黄色片 | 97理论片 | 久久超碰在线 | 日韩黄色在线电影 | 69久久99精品久久久久婷婷 | 色美女在线 | 亚洲国产精品一区二区久久,亚洲午夜 | 五月激情姐姐 | 日韩字幕 | 日本一区二区三区视频在线播放 | 日韩综合一区二区三区 | 18国产精品白浆在线观看免费 | 久久久久久免费网 | 中文字幕av网站 | 黄色三级在线 | 国产精品久久久久久久久搜平片 | 国产成人av一区二区三区在线观看 | 久久9999久久免费精品国产 | 国产午夜精品一区二区三区嫩草 | 中文字幕一区在线观看视频 | 国内精品在线看 | 成人免费看片网址 | 国产亚洲免费的视频看 | 一级一片免费视频 | 色综合夜色一区 | 成年人毛片在线观看 | 97国产在线视频 | 国产一区二区不卡视频 | 日韩精品电影在线播放 | 国产96视频| 亚洲一区网 | 在线免费视频 你懂得 | 伊人久久婷婷 | 久久99亚洲精品久久 | 91人人澡人人爽 | 在线精品在线 | 日一日干一干 | 国产精品99久久久久久久久 | 中文字幕中文字幕中文字幕 | 香蕉网站在线观看 | 日韩三区在线 | 日日噜噜噜噜夜夜爽亚洲精品 | 久久在线 | 美女在线观看av | 伊人久久av | 久久久久国产精品一区二区 | 黄色电影在线免费观看 | 亚洲精品视频网址 | 亚洲精品啊啊啊 | 中文av资源站 | 高清av在线免费观看 | 欧美一级片免费观看 | 欧美在线观看小视频 | 国产精品原创 | 精品国产91亚洲一区二区三区www | 日日操夜夜操狠狠操 | 1区2区视频| 久久久精品久久 | 国产日韩欧美自拍 | a黄色片| 激情亚洲综合在线 | 中文字幕888| 国产福利91精品张津瑜 | 久久国产91 | 成人a免费视频 | 99视频在线精品免费观看2 | 国产精品美乳一区二区免费 | 日韩v欧美v日本v亚洲v国产v | 天天爱天天操天天爽 | 久久高清| 成人三级网站在线观看 | 国产精品免费观看久久 | 美女视频是黄的免费观看 | 国产91在线 | 美洲 | 丁香午夜 | 四虎影视国产精品免费久久 | 欧美在线观看视频 | 99在线免费视频 | 久久久久久久久综合 | 国产精品一区二区在线观看免费 | 91精品国产自产在线观看永久 | 在线视频你懂得 | 91传媒在线播放 | 亚洲一区视频在线播放 | www.久久久.com| 国产精品一区久久久久 | 中文字幕日本在线 | 日韩综合一区二区三区 | 久久97久久97精品免视看 | 综合网婷婷 | 午夜精品久久久久久久久久久久久久 | 国产在线2020 | 91在线视频网址 | 日韩免费精品 | 波多野结衣在线中文字幕 | 久草色在线观看 | 福利网址在线观看 | 色婷婷亚洲综合 | 亚洲在线网址 | 天天天干天天射天天天操 | 欧美一级在线观看视频 | 天天天插 | 激情伊人五月天 | 免费午夜av | 成人在线一区二区三区 | 久久精品国产一区 | 中文字幕av最新更新 | 中文一区在线观看 | 日本丶国产丶欧美色综合 | 国产天天爽 | 三级av免费观看 | 午夜精品久久久久久久久久久 | 人人爽人人 | 91精品办公室少妇高潮对白 | 99爱视频在线观看 | 91cn国产在线 | 69夜色精品国产69乱 | 免费看毛片在线 | 日批在线观看 | 成人动漫视频在线 | 欧美日韩激情视频8区 | 999毛片 | www.五月天色 | 在线电影 一区 | 国产日本亚洲 | 日韩视频一区二区在线 | 欧美伦理一区二区三区 | 国产精品露脸在线 | 四虎成人在线 | 亚洲人在线 | 99日精品| 久久久久 免费视频 | 色综合天天视频在线观看 | 国产精品免费观看视频 | 五月激情亚洲 | 欧美乱淫视频 | 九九热免费在线观看 | 青青色影院 | 国产精品久久久久久久久久99 | 国产精品一区二区三区四区在线观看 | 伊人射 | 久久电影中文字幕视频 | 欧美国产不卡 | 婷婷在线资源 | 丁香花在线观看免费完整版视频 | 中文字幕在线国产 | 成人91免费视频 | 久久成人毛片 | a午夜在线| 视频国产在线 | 美腿丝袜一区二区三区 | 91精品啪啪| 人人插人人艹 | 亚洲欧美精品一区二区 | 激情网婷婷 | 色橹橹欧美在线观看视频高清 | 99视频+国产日韩欧美 | 亚洲精品乱码久久久久久蜜桃欧美 | 91麻豆福利 | 日日弄天天弄美女bbbb | 成人黄色大片在线免费观看 | 久久av一区二区三区亚洲 | 久久国语露脸国产精品电影 | 日韩欧美成人网 | 久精品在线观看 | 中文字幕av在线电影 | 精品在线免费视频 | 久久免费视频1 | www久久 | 日韩在线高清视频 | 久草爱| 欧美日韩国产精品一区二区亚洲 | 亚洲精品国产欧美在线观看 | 97福利在线观看 | 成年美女黄网站色大片免费看 | 91精品色 | 日韩最新在线视频 | 不卡精品视频 | 久久精品资源 | 日韩av看片 | 在线观看av不卡 | 日韩精品一区在线观看 | 最近中文字幕大全中文字幕免费 | 天天干天天插 | 成人黄色大片在线观看 | 欧美另类美少妇69xxxx | 久久精品国产美女 | 日韩区在线观看 | 成人免费视频观看 | 亚洲人成人天堂h久久 | 毛片a级片| 免费视频国产 | 超碰97在线人人 | 99久精品视频 | 亚洲欧美视屏 | 97色婷婷 | 日韩av免费在线看 | 天天射网站 | 日韩在线一级 | wwwww.国产| 91成品视频 | 亚洲成人精品国产 | 欧美另类网站 | 久久中文字幕视频 | 国产一级特黄电影 | 亚洲理论片在线观看 | 日韩av有码在线 | 国内小视频 | www.操.com| 亚洲资源在线观看 | 伊人天天综合 | 欧美一区二区三区激情视频 | 亚洲精品久久久蜜桃直播 | 欧美日韩性生活 | 成人精品一区二区三区中文字幕 | 亚洲欧美日本国产 | 日韩网站在线播放 | 国产精品免费一区二区 | 欧美一级高清片 | 午夜精品久久久久久久久久久久 | 九九免费在线视频 | 国产黄免费在线观看 | 91在线一区二区 | 一级成人免费视频 | 国产黄网站在线观看 | 国产精品久久伊人 | 天天夜夜狠狠操 | 国产成人免费观看久久久 | 欧美 激情在线 | 久久网址 | 黄色片网站 | 午夜美女福利直播 | 中文字幕在线视频免费播放 | 成人h视频在线播放 | 精品99免费视频 | 国产69久久精品成人看 | 久久色视频 | 成人av免费在线播放 | 婷婷亚洲综合五月天小说 | aaa毛片视频 | 日韩免费一级a毛片在线播放一级 | 手机看片国产日韩 | 国产午夜影院 | 亚洲国产精品成人va在线观看 | 国产99一区视频免费 | 美女精品在线观看 | 黄色亚洲在线 | 免费进去里的视频 | www四虎影院 | 色综合久久88色综合天天 | 99国产在线观看 | 欧美日韩在线电影 | av高清一区 | 超碰97在线看 | 97视频在线免费 | 国内精品久久久久久 | 精品国产一区二区三区四区vr | 亚洲精品中文字幕视频 | 精品国产人成亚洲区 | 亚洲毛片在线观看. | 国产精品18久久久久久vr | 欧美在线资源 | 欧美日韩不卡一区二区三区 | 日韩免费在线视频观看 | 97国产超碰在线 | 日日躁夜夜躁xxxxaaaa | 国产日韩欧美在线一区 | 中文字幕乱码亚洲精品一区 | 九九久久精品视频 | 日韩中文字幕免费电影 | 成人久久18免费网站麻豆 | 免费a级大片| 国产精品毛片久久久久久久 | 欧美国产日韩中文 | 激情片av | 精品一区二区免费 | 欧美一级片在线免费观看 | 6080yy午夜一二三区久久 | 久久精品视频国产 | 久久精品一区二区 | 免费在线观看亚洲视频 | 二区三区在线观看 | 日日爽天天 | 在线视频一区二区 | 蜜臀av一区二区 | 欧美在线你懂的 | 久久视频免费观看 | 国产精品久久久久久久久久久久午 | 国产成人综合在线观看 | 91精品国产成| 久产久精国产品 | 天天色综合三 | 黄色片毛片 | 日本丶国产丶欧美色综合 | 成人在线免费看视频 | 中文成人字幕 | 成人国产电影在线观看 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 久久久久久久久久久免费视频 | 中文字幕日韩伦理 | 欧美极品久久 | 视频成人免费 | 亚洲成a人片综合在线 | 久久国产精品99久久久久 | 99精品小视频 | 99久久影视 | 在线精品视频免费播放 | 一区二区精品在线 | 欧美性天天 | 91精品国产自产在线观看永久 | 97国产大学生情侣白嫩酒店 | 看黄色.com | 99热官网 | 综合网伊人 | 九九九电影免费看 | 久久久免费观看视频 | 一区二区三区国 | 国产精品一区二区视频 | 亚州av网站 | 一级片视频在线 | 中文字幕国语官网在线视频 | 国产一区二区免费 | 成人毛片在线观看视频 | a在线视频v视频 | 成年人黄色免费视频 | 免费观看丰满少妇做爰 | 一区二区三区精品在线 | 伊人视频 | 国产精品日韩在线观看 | 欧美a√大片 | www在线免费观看 | 中文字幕在线播放一区 | 91cn国产在线 | 日韩a级免费视频 | 18久久久 | 亚洲涩涩一区 | 国内精品在线一区 | 久久久久久综合网天天 | 久久九九国产视频 | 人人爱在线视频 | 8x成人免费视频 | 国产在线观看国语版免费 | 国产原厂视频在线观看 | 丝袜少妇在线 | 久久久久久久久久久影院 | 99免在线观看免费视频高清 | 在线亚洲观看 | 天堂在线免费视频 | 欧洲精品在线视频 | 久久精美视频 | 国产亚洲综合在线 | 亚洲国产精彩中文乱码av | 玖草影院 | 国产精品理论片在线观看 | 狠狠干激情 | 婷婷色社区 | 最近中文字幕高清字幕在线视频 | 欧美一级久久久 | 婷婷丁香在线观看 | 激情五月婷婷激情 | 国产精品毛片网 | 五月天丁香视频 | 麻豆久久精品 | 欧美一级电影片 | 2019中文在线观看 | 永久精品视频 | 1区2区3区在线观看 三级动图 | 天天人人 | 久久久久国产精品www | 不卡中文字幕在线 | 91丨九色丨首页 | 国产在线国偷精品产拍 | 婷婷色网站 | 国产99久久久国产精品免费二区 | 久久av影视| 国产精品久久久久久久久久不蜜月 | 国内精品久久久久久久久久清纯 | 欧美一级性生活 | 999久久久| 91女人18片女毛片60分钟 | 91精品在线免费观看 | 国产69精品久久app免费版 | 午夜久久影视 | 久草在线视频在线观看 | 免费精品人在线二线三线 | 精品国产免费看 | av在线播放一区二区三区 | 天天操天天爽天天干 | 91精品视频导航 | 免费韩国av | 欧美一级视频在线观看 | 色橹橹欧美在线观看视频高清 | 亚洲国产97在线精品一区 | 亚洲最新视频在线播放 | 久久99视频 | 91久久爱热色涩涩 | 久草色在线观看 | 中文字幕一区二区三区在线视频 | 永久免费毛片 | 国产精品美女www爽爽爽视频 | av丝袜美腿| 91视频久久久 | 毛片激情永久免费 | 中文字幕黄网 | 欧美精品久久久久a | 国产视频一区二区在线 | 成人亚洲精品久久久久 | 男女视频久久久 | 精品国产乱码久久久久久1区2匹 | 中文在线字幕免费观看 | 8x8x在线观看视频 | 最新久久免费视频 | 国产黄| 欧美成人基地 | 久久不射电影院 | 久久精品视频国产 | 欧美va天堂va视频va在线 | 精品一二| 国产在线视频一区二区 | 久久成人资源 | 日韩精品在线观看av | 精品免费久久 | 精品国产综合区久久久久久 | 成人黄色资源 | 国产精品theporn | 激情五月五月婷婷 | 日日夜夜骑 | www色婷婷com|