久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Nacos+Spring Cloud Gateway動態路由配置實現步驟

瀏覽:4日期:2023-06-26 13:39:46
目錄前言一、Nacos環境準備1、啟動Nacos配置中心并創建路由配置2、連接Nacos配置中心二、項目構建1、項目結構2、編寫測試代碼三、測試動態網關配置1、啟動服務,觀察注冊中心2、訪問網關,觀察服務日志四、總結前言

Nacos最近項目一直在使用,其簡單靈活,支持更細粒度的命令空間,分組等為麻煩復雜的環境切換提供了方便;同時也很好支持動態路由的配置,只需要簡單的幾步即可。在國產的注冊中心、配置中心中比較突出,容易上手,本文通過gateway、nacos-consumer、nacos-provider三個簡單模塊來展示:Nacos下動態路由配置。

 博文中源碼已上傳至github(https://github.com/Jian0110/learning-cloudalibaba),歡迎小伙伴們star

一、Nacos環境準備1、啟動Nacos配置中心并創建路由配置

具體的Nacos怎么配置就不介紹了,可以參考阿里巴巴的官方介紹,這里通過windows直接本地啟動開啟單機模式,登錄Nacos Console,創建dev的namespace,在dev下的默認分組下創建gateway-router的dataId

Nacos+Spring Cloud Gateway動態路由配置實現步驟

gateway-router的主要初始化配置如下:關于gateway的組成(id,order、predicates斷言,uri)這里就不詳細說明的了,可以自行百度下

Nacos+Spring Cloud Gateway動態路由配置實現步驟

[{ 'id': 'consumer-router', 'order': 0, 'predicates': [{'args': { 'pattern': '/consume/**'},'name': 'Path' }], 'uri': 'lb://nacos-consumer'},{ 'id': 'provider-router', 'order': 2, 'predicates': [{'args': { 'pattern': '/provide/**'},'name': 'Path' }], 'uri': 'lb://nacos-provider'}]2、連接Nacos配置中心

通常在項目中配置“配置中心”往往都是在bootstrap.propertis(yaml)中配置,這樣才能保證項目中路由配置從Nacos Config中讀取。

# nacos配置中心配置建議在bootstrap.properties中配置spring.cloud.nacos.config.server-addr=127.0.0.1:8848#spring.cloud.nacos.config.file-extension=properties# 配置中心的命名空間:dev 的命名空間(環境)spring.cloud.nacos.config.namespace=08ecd1e5-c042-410a-84d5-b0a8fbeed8ea

Application啟動類中增加注解@EnableDiscoveryClient,才能保證連接到Nacos Config

@SpringBootApplication@EnableDiscoveryClientpublic class GatewayApplication{ public static void main( String[] args ) {SpringApplication.run(GatewayApplication.class, args); }}二、項目構建1、項目結構

創建簡單的springboot多模塊結構,推薦使用idea創建

1)Nacos父模塊:

<groupId>com.springcloud</groupId><artifactId>nacos</artifactId><version>0.0.1-SNAPSHOT</version><name>nacos</name><description>Nacos Demo</description>

首先pom文件引入Spring Cloud Alibaba Nacos組件:注冊中心nacos-discovery與配置中心nacos-config

<!--nacos 客戶端 注冊中心--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>${alibaba-nacos.version}</version> </dependency> <!--nacos 客戶端 配置中心--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>${alibaba-nacos.version}</version> </dependency>

其次再引入Spring Cloud相關組件依賴

<dependencyManagement><dependencies> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope> </dependency> <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>

其它組件依賴引入(修正:如果引入了nacos-api相關的JSON依賴,那么fastjson就不需要再引入了,否則可能沖突):

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version></dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope></dependency><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>

注意,這里有個坑,spring cloud gateway使用的web框架為webflux,和springMVC不兼容。所以不要引入(修正:只有gateway服務不用引入springMVC,其他需要引入)

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>

2)三個子模塊:gateway、nacos-consumer、nacos-provider

<modules><module>nacos-provider</module><module>nacos-consumer</module><module>gateway</module></modules>

結構截圖如下所示:

Nacos+Spring Cloud Gateway動態路由配置實現步驟

3)三個服務的端口分別為:

nacos-consume:6001

nacos-provider:6002

gateway:6003

4)服務架構如下:

Nacos+Spring Cloud Gateway動態路由配置實現步驟

2、編寫測試代碼

(1)在gateway模塊中主要實現以下功能:

第一,從Nacos配置中心中加載動態路由的相關配置,就需要讀取Nacos的命名空間namespace,通過dataId獲取配置

/** * 路由類配置 */@Configurationpublic class GatewayConfig { public static final long DEFAULT_TIMEOUT = 30000; public static String NACOS_SERVER_ADDR; public static String NACOS_NAMESPACE; public static String NACOS_ROUTE_DATA_ID; public static String NACOS_ROUTE_GROUP; @Value('${spring.cloud.nacos.discovery.server-addr}') public void setNacosServerAddr(String nacosServerAddr){NACOS_SERVER_ADDR = nacosServerAddr; } @Value('${spring.cloud.nacos.discovery.namespace}') public void setNacosNamespace(String nacosNamespace){NACOS_NAMESPACE = nacosNamespace; } @Value('${nacos.gateway.route.config.data-id}') public void setNacosRouteDataId(String nacosRouteDataId){NACOS_ROUTE_DATA_ID = nacosRouteDataId; } @Value('${nacos.gateway.route.config.group}') public void setNacosRouteGroup(String nacosRouteGroup){NACOS_ROUTE_GROUP = nacosRouteGroup; }}

properties配置關于Nacos下讀取gateway-router的配置:

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848spring.cloud.nacos.discovery.namespace=08ecd1e5-c042-410a-84d5-b0a8fbeed8eanacos.gateway.route.config.data-id=gateway-routernacos.gateway.route.config.group=DEFAULT_GROUP

第二,初始化路由,監聽動態路由配置的數據源變化(2020.12.28解決刪除路由不生效問題);

/** * * 通過nacos下發動態路由配置,監聽Nacos中gateway-route配置 * */@Component@Slf4j@DependsOn({'gatewayConfig'}) // 依賴于gatewayConfig beanpublic class DynamicRouteServiceImplByNacos { @Autowired private DynamicRouteServiceImpl dynamicRouteService; private ConfigService configService; @PostConstruct public void init() {log.info('gateway route init...');try{ configService = initConfigService(); if(configService == null){log.warn('initConfigService fail');return; } String configInfo = configService.getConfig(GatewayConfig.NACOS_ROUTE_DATA_ID, GatewayConfig.NACOS_ROUTE_GROUP, GatewayConfig.DEFAULT_TIMEOUT); log.info('獲取網關當前配置:rn{}',configInfo); List<RouteDefinition> definitionList = JSON.parseArray(configInfo, RouteDefinition.class); for(RouteDefinition definition : definitionList){log.info('update route : {}',definition.toString());dynamicRouteService.add(definition); }} catch (Exception e) { log.error('初始化網關路由時發生錯誤',e);}dynamicRouteByNacosListener(GatewayConfig.NACOS_ROUTE_DATA_ID,GatewayConfig.NACOS_ROUTE_GROUP); } /** * 監聽Nacos下發的動態路由配置 * @param dataId * @param group */ public void dynamicRouteByNacosListener (String dataId, String group){try { configService.addListener(dataId, group, new Listener() {@Overridepublic void receiveConfigInfo(String configInfo) { log.info('進行網關更新:nr{}',configInfo); List<RouteDefinition> definitionList = JSON.parseArray(configInfo, RouteDefinition.class); log.info('update route : {}',definitionList.toString()); dynamicRouteService.updateList(definitionList);}@Overridepublic Executor getExecutor() { log.info('getExecutornr'); return null;} });} catch (NacosException e) { log.error('從nacos接收動態路由配置出錯!!!',e);} } /** * 初始化網關路由 nacos config * @return */ private ConfigService initConfigService(){try{ Properties properties = new Properties(); properties.setProperty('serverAddr',GatewayConfig.NACOS_SERVER_ADDR); properties.setProperty('namespace',GatewayConfig.NACOS_NAMESPACE); return configService= NacosFactory.createConfigService(properties);} catch (Exception e) { log.error('初始化網關路由時發生錯誤',e); return null;} }}

第三,刷新最新的動態路由變化,實現動態增刪改路由(2020.12.28解決刪除路由不生效問題)

/** * 動態更新路由網關service * 1)實現一個Spring提供的事件推送接口ApplicationEventPublisherAware * 2)提供動態路由的基礎方法,可通過獲取bean操作該類的方法。該類提供新增路由、更新路由、刪除路由,然后實現發布的功能。 */@Slf4j@Servicepublic class DynamicRouteServiceImpl implements ApplicationEventPublisherAware { @Autowired private RouteDefinitionWriter routeDefinitionWriter; @Autowired private RouteDefinitionLocator routeDefinitionLocator; /** * 發布事件 */ @Autowired private ApplicationEventPublisher publisher; @Override public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.publisher = applicationEventPublisher; } /** * 刪除路由 * @param id * @return */ public String delete(String id) {try { log.info('gateway delete route id {}',id); this.routeDefinitionWriter.delete(Mono.just(id)).subscribe(); this.publisher.publishEvent(new RefreshRoutesEvent(this)); return 'delete success';} catch (Exception e) { return 'delete fail';} } /** * 更新路由 * @param definitions * @return */ public String updateList(List<RouteDefinition> definitions) {log.info('gateway update route {}',definitions);// 刪除緩存routerDefinitionList<RouteDefinition> routeDefinitionsExits = routeDefinitionLocator.getRouteDefinitions().buffer().blockFirst();if (!CollectionUtils.isEmpty(routeDefinitionsExits)) { routeDefinitionsExits.forEach(routeDefinition -> {log.info('delete routeDefinition:{}', routeDefinition);delete(routeDefinition.getId()); });}definitions.forEach(definition -> { updateById(definition);});return 'success'; } /** * 更新路由 * @param definition * @return */ public String updateById(RouteDefinition definition) {try { log.info('gateway update route {}',definition); 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 definition * @return */ public String add(RouteDefinition definition) {log.info('gateway add route {}',definition);routeDefinitionWriter.save(Mono.just(definition)).subscribe();this.publisher.publishEvent(new RefreshRoutesEvent(this));return 'success'; }}三、測試動態網關配置1、啟動服務,觀察注冊中心

分別啟動gateway、nacos-consumer、nacos-provider三個服務,觀察是否已經在Nacos上正確注冊

Nacos+Spring Cloud Gateway動態路由配置實現步驟

注意:需要指定注冊中心的namespace為dev的空間,即spring.cloud.nacos.discovery.namespace=08ecd1e5-c042-410a-84d5-b0a8fbeed8ea

2、訪問網關,觀察服務日志

(1)查看gateway服務的初始化啟動日志:會發現可以正常從Nacos獲取配置gateway-router網關配置文件內容,并進行正確路由加載...

2020-05-10 14:33:44.557 INFO 1272 --- [ main] c.g.r.DynamicRouteServiceImplByNacos : gateway route init...2020-05-10 14:33:44.578 INFO 1272 --- [ main] c.g.r.DynamicRouteServiceImplByNacos : 獲取網關當前配置:[{ 'id': 'consumer-router', 'order': 0, 'predicates': [{'args': { 'pattern': '/consume/**'},'name': 'Path' }], 'uri': 'lb://nacos-consumer'},{ 'id': 'provider-router', 'order': 2, 'predicates': [{'args': { 'pattern': '/provide/**'},'name': 'Path' }], 'uri': 'lb://nacos-provider'}]2020-05-10 14:33:44.691 INFO 1272 --- [ main] c.g.r.DynamicRouteServiceImplByNacos : update route : RouteDefinition{id=’consumer-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/consume/**}}], filters=[], uri=lb://nacos-consumer, order=0, metadata={}}2020-05-10 14:33:44.691 INFO 1272 --- [ main] c.g.service.DynamicRouteServiceImpl : gateway add route RouteDefinition{id=’consumer-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/consume/**}}], filters=[], uri=lb://nacos-consumer, order=0, metadata={}}2020-05-10 14:33:45.192 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [After]2020-05-10 14:33:45.192 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Before]2020-05-10 14:33:45.192 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Between]2020-05-10 14:33:45.193 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Cookie]2020-05-10 14:33:45.193 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Header]2020-05-10 14:33:45.193 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Host]2020-05-10 14:33:45.194 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Method]2020-05-10 14:33:45.194 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Path]2020-05-10 14:33:45.194 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Query]2020-05-10 14:33:45.194 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [ReadBodyPredicateFactory]2020-05-10 14:33:45.194 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [RemoteAddr]2020-05-10 14:33:45.194 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Weight]2020-05-10 14:33:45.194 INFO 1272 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [CloudFoundryRouteService]2020-05-10 14:33:45.335 INFO 1272 --- [ main] c.g.r.DynamicRouteServiceImplByNacos : update route : RouteDefinition{id=’provider-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/provide/**}}], filters=[], uri=lb://nacos-provider, order=2, metadata={}}2020-05-10 14:33:45.335 INFO 1272 --- [ main] c.g.service.DynamicRouteServiceImpl : gateway add route RouteDefinition{id=’provider-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/provide/**}}], filters=[], uri=lb://nacos-provider, order=2, metadata={}}2020-05-10 14:33:45.336 INFO 1272 --- [ main] c.g.r.DynamicRouteServiceImplByNacos : update route : RouteDefinition{id=’github-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/github}}], filters=[], uri=https://github.com, order=3, metadata={}}2020-05-10 14:33:45.336 INFO 1272 --- [ main] c.g.service.DynamicRouteServiceImpl : gateway add route RouteDefinition{id=’github-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/github}}], filters=[], uri=https://github.com, order=3, metadata={}}

但這只能說明是初始化靜態路由,下面我們改變gateway-router網關配置內容,追加github-router路由

[{ 'id': 'consumer-router', 'order': 0, 'predicates': [{'args': { 'pattern': '/consume/**'},'name': 'Path' }], 'uri': 'lb://nacos-consumer'},{ 'id': 'provider-router', 'order': 2, 'predicates': [{'args': { 'pattern': '/provide/**'},'name': 'Path' }], 'uri': 'lb://nacos-provider'},{ 'id': 'github-router', 'order': 2, 'predicates': [{'args': { 'pattern': '/github/**'},'name': 'Path' }], 'uri': 'https://github.com'}]

之后點擊發布更新路由配置

Nacos+Spring Cloud Gateway動態路由配置實現步驟

觀察gateway服務日志,有沒有監聽,并且進行正確的路由更新:如下日志所示,最新路由配置立馬被打印,并且進行正確路由更新

2020-05-10 14:42:27.576 INFO 1272 --- [d5-b0a8fbeed8ea] c.g.r.DynamicRouteServiceImplByNacos : 進行網關更新:[{ 'id': 'consumer-router', 'order': 0, 'predicates': [{'args': { 'pattern': '/consume/**'},'name': 'Path' }], 'uri': 'lb://nacos-consumer'},{ 'id': 'provider-router', 'order': 2, 'predicates': [{'args': { 'pattern': '/provide/**'},'name': 'Path' }], 'uri': 'lb://nacos-provider'},{ 'id': 'github-router', 'order': 2, 'predicates': [{'args': { 'pattern': '/github/**'},'name': 'Path' }], 'uri': 'https://github.com'}]2020-05-10 14:42:27.576 INFO 1272 --- [d5-b0a8fbeed8ea] c.g.r.DynamicRouteServiceImplByNacos : update route : RouteDefinition{id=’consumer-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/consume/**}}], filters=[], uri=lb://nacos-consumer, order=0, metadata={}}2020-05-10 14:42:27.576 INFO 1272 --- [d5-b0a8fbeed8ea] c.g.service.DynamicRouteServiceImpl : gateway update route RouteDefinition{id=’consumer-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/consume/**}}], filters=[], uri=lb://nacos-consumer, order=0, metadata={}}2020-05-10 14:42:27.578 INFO 1272 --- [d5-b0a8fbeed8ea] c.g.r.DynamicRouteServiceImplByNacos : update route : RouteDefinition{id=’provider-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/provide/**}}], filters=[], uri=lb://nacos-provider, order=2, metadata={}}2020-05-10 14:42:27.578 INFO 1272 --- [d5-b0a8fbeed8ea] c.g.service.DynamicRouteServiceImpl : gateway update route RouteDefinition{id=’provider-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/provide/**}}], filters=[], uri=lb://nacos-provider, order=2, metadata={}}2020-05-10 14:42:27.580 INFO 1272 --- [d5-b0a8fbeed8ea] c.g.r.DynamicRouteServiceImplByNacos : update route : RouteDefinition{id=’github-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/github/**}}], filters=[], uri=https://github.com, order=2, metadata={}}2020-05-10 14:42:27.580 INFO 1272 --- [d5-b0a8fbeed8ea] c.g.service.DynamicRouteServiceImpl : gateway update route RouteDefinition{id=’github-router’, predicates=[PredicateDefinition{name=’Path’, args={pattern=/github/**}}], filters=[], uri=https://github.com, order=2, metadata={}}

其實,還有辦法可以知道我們的gateway服務有沒有監聽Nacos的gateway-router配置,那就是在Nacos Console--->監聽查詢----->選擇配置---->輸入配置文件的namespace與Group:可以發現我本地IP地址127.0.0.1對配置文件gateway-router進行了監聽

Nacos+Spring Cloud Gateway動態路由配置實現步驟

(2)訪問gateway網關服務:http://localhost:6003/consume/sayHello/nacos

Nacos+Spring Cloud Gateway動態路由配置實現步驟

查看consumer服務日志:

2020-05-10 14:55:07.257 INFO 6552 --- [nio-6001-exec-2] c.n.c.controller.ConsumeController : I’m calling nacos-consumer service by dynamic gateway...

發現跳轉至consumer服務,并且訪問了consumer服務的CosnumerController

(3)訪問gateway網關服務:http://localhost:6003/provider/sayHello/nacos

Nacos+Spring Cloud Gateway動態路由配置實現步驟

查看provider服務日志:

2020-05-10 14:56:56.144 INFO 10024 --- [nio-6002-exec-1] c.n.p.controller.ProviderController : I’m calling nacos-provider service by dynamic gateway...

發現跳轉至consumer服務,并且訪問了provider服務的ProviderController

(4)訪問訪問gateway網關服務:http://localhost:6003/github,正確跳轉至github頁面

Nacos+Spring Cloud Gateway動態路由配置實現步驟

四、總結

1)Spring Cloud Gateway作用不光只是簡單的跳轉重定向,還可以實現用戶的驗證登錄,解決跨域,日志攔截,權限控制,限流,熔斷,負載均衡,黑名單和白名單機制等。是微服務架構不二的選擇;

2)Nacos的配置中心支持動態獲取配置文件,可以將一些全局的經常變更的配置文件放在Nacos下,需要到微服務自行獲取。

2020.12.28解決刪除路由不生效問題,主要是利用RouteDefinitionLocator先讀取變化之前的RouteDefinition,之后刪除重新再更新,或者可以實現routeDefinitionWriter、RouteDefinitionLocator重寫如下方法:

Mono<Void> save(Mono<RouteDefinition> route);Mono<Void> delete(Mono<String> routeId);Flux<RouteDefinition> getRouteDefinitions();

到此這篇關于Nacos+Spring Cloud Gateway動態路由配置實現步驟的文章就介紹到這了,更多相關Spring Cloud Gateway動態路由內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 麻豆精品一区二区 | 国产精品美女久久久久久久网站 | 午夜精品福利一区二区三区蜜桃 | 天天干人人| 中文字幕本久久精品一区 | 91麻豆产精品久久久久久 | 免费一区二区 | 成人在线视频免费观看 | 欧美一区二区三区 | 国户精品久久久久久久久久久不卡 | 国产精品久久av | 综合伊人久久 | 亚洲精品成人在线 | 成人精品一区二区三区 | 久久精品小视频 | 日日精品| 看片地址 | 日韩视频在线观看 | 日本视频在线 | 看片地址 | 亚洲精品一区中文字幕乱码 | 亚洲欧洲一区 | 禁果av一区二区三区 | 日韩精品免费观看 | 视色视频在线观看 | 日日久 | 在线精品观看 | 超碰8| 天堂成人av | 亚洲 欧美 另类 综合 偷拍 | 日本好好热视频 | 成人免费看黄色 | 欧美日韩福利 | 一级毛片国产 | 久久综合电影 | 综合伊人久久 | 国产精品美女久久久久久久久久久 | 成人欧美 | 欧美成人免费 | 国产成人在线视频 | 久久精品中文字幕 | 中文字幕av黄色 | 爱爱视频网站 | 国产精品一区在线 | a级在线观看 | 射久久 | 99精品国产高清一区二区麻豆 | 小草av| 国产成人精品午夜视频' | 一级全黄少妇性色生活片免费 | 成人欧美一区二区三区 | 不卡免费视频 | 日本a v网站 | 毛片真人毛毛片毛片 | 久久手机在线视频 | 国产视频一区二区 | 亚洲八区| 国产精品黄视频 | 午夜影晥 | 欧洲av在线 | 国产精品96久久久久久久 | 国产成人精品免费视频 | 无毒黄网| 久久婷婷国产麻豆91天堂 | 天天看天天爽 | 性视频网站免费 | 国产精品视频成人 | 99伊人| 国产成人精品午夜视频免费 | 日韩精品久久久久 | 精品久久久久久久久久久久久久 | 欧美日韩高清在线一区 | 杏导航aⅴ福利网站 | 日韩三级在线 | 欧美日韩在线观看一区二区三区 | 一区二区三区四区在线 | 久久久性色精品国产免费观看 | 免费的av网站 | 五月天婷婷在线视频 | 精品久久久久久久久久久 | 成人高清视频免费观看 | 特级黄一级播放 | 天天操天天干天天 | 久久综合伊人77777 | 午夜小视频免费 | 亚洲第一福利视频 | 亚洲一区二区三区四区五区午夜 | 国产精品日韩欧美 | 最新国产福利在线 | 日韩精品日韩激情日韩综合 | 国产亚洲精品久久久优势 | 久久成人一区 | 国产精品久久久久一区二区三区 | 久久高清亚洲 | 国产精品1页 | 高清国产视频 | 欧美一区二区三区在线观看 | 91高清免费看 | 欧美人体一区二区三区 | 久久久综合色 | 日日干夜夜操 | 综合一区二区三区 | 日韩在线不卡 | 免费午夜剧场 | 色综合久久伊人 | 99精品国产在热久久 | 剑来高清在线观看 | 99精品视频一区二区三区 | 国产传媒在线视频 | 黄色资源在线观看 | 欧洲免费av | 日韩视频精品在线观看 | 一区二区三区四区在线视频 | 99国产精品99久久久久久 | 欧美视频免费在线 | 国产麻豆乱码精品一区二区三区 | 国产一区二区精品丝袜 | 欧美亚洲一区 | 韩国精品一区二区三区 | 久久一区二区三区四区 | 免费黄色在线 | 亚洲在线| 国产一区二区三区免费视频 | 无码国模国产在线观看 | 最新日韩视频 | 男女激情网址 | 我要看黄色一级大片 | 在线播放亚洲 | 国产96在线观看 | 在线观看亚洲大片短视频 | 久久久2o19精品 | 精品日韩欧美一区二区在线播放 | www.中文字幕在线 | 国产乱肥老妇国产一区二 | 超碰日韩在线 | 久久国产香蕉视频 | 欧美一区二区三区 | 国产精品不卡视频 | 亚洲精品国产一区 | 欧美a在线 | 久久99精品久久久久久琪琪 | 日韩一区二区三区在线视频 | 欧美日韩中文 | 成人精品一区二区三区中文字幕 | 久久叉 | 久久综合一区二区三区 | 日本在线观看网站 | 亚洲午夜精品a | 亚洲综合区 | 国产免费高清 | 欧美日韩中文字幕在线 | 中文字幕视频在线 | 久久精品一区二区三区不卡牛牛 | 视频在线亚洲 | 久久精品一区二区三区四区 | 九九精品久久久 | 日本精品久久久一区二区三区 | 久久国产精品免费一区二区三区 | 国产高清久久久 | 久久69精品久久久久久久电影好 | 国产美女在线播放 | 91久久精品一区二区别 | 亚洲激情在线 | 欧美午夜在线 | 亚洲一区二区中文字幕 | 天堂一区二区三区 | 色婷婷av一区二区三区大白胸 | 日本久久久久久久久久久久 | 免费无遮挡www小视频 | 久久99国产精品久久99大师 | 久久激情五月丁香伊人 | 久久精品一区二区三区四区 | 国产高清免费 | 亚洲精品久久久久久久久久久 | 亚洲精品一区中文字幕乱码 | 一区二区在线 | 日韩a电影 | 韩日精品一区 | 狠狠插狠狠操 | www久久久| 91精品久久久久久久久久 | www.久久99 | 国产日韩高清在线 | 国产富婆一级全黄大片 | 欧美高清视频一区 | 亚洲一区观看 | 久久人人爽人人爽人人片av高清 | 久草视频首页 | 国产成人亚洲综合 | 欧美二区三区视频 | 国产成人av在线播放 | 天天草狠狠干 | 午夜影院在线观看 | 成人日韩在线观看 | 狠狠躁夜夜躁人人爽天天天天97 | 久久成人免费观看 | 精品久久久久久亚洲精品 | 亚洲视频在线观看 | 日本不卡免费新一二三区 | 欧美一级小视频 | 亚洲欧美一区二区三区不卡 | 国产午夜手机精彩视频 | 免费黄色录像视频 | 日韩城人免费 | 一级片免费视频 | 精品无人乱码一区二区三区 | 亚洲国产精品久久 | 欧美性v | 亚洲视频一 | 激情com | 91亚洲国产成人久久精品网站 | 亚洲国产成人av好男人在线观看 | 亚洲一级黄色 | 久久这里只有国产精品 | 日日干,天天干 | 国产一区二 | 亚洲精品视频大全 | 日日干夜夜操 | 亚洲成人免费电影 | 久久国产精品一区 | av免费看在线 | 国产中文一区 | 国产精品2019 | 久久伊人av | www国产成人免费观看视频,深夜成人网 | 亚洲福利二区 | av中文字幕在线 | 免费av手机在线观看 | 久草在线视频网 | 日韩成人| 欧美日韩在线视频一区二区 | 久久久久av | 50人群体交乱视频 | 97久久久国产精品 | 国产精品日日做人人爱 | 亚洲一区中文字幕 | 激情在线观看视频 | 久久y| 欧美大片一区二区 | 久久亚洲精品综合 | 亚洲精品久久久久久下一站 | jizz欧美最大 | 在线一区二区三区做爰视频网站 | 一区二区三区精品视频 | 激情欧美一区二区三区中文字幕 | 黄色小视频在线免费观看 | 亚洲成人免费在线 | 国产精品成人在线观看 | 日韩一区二区三区在线观看 | 亚洲一区二区三区四区五区中文 | 在线中文字幕观看 | 精品国产一区二区三区不卡蜜臂 | 欧美二区三区 | 国产免费一区二区三区 | 日p视频免费看 | 精品久久精品 | 91高清视频在线观看 | 日韩欧美国产精品综合嫩v 久久久久久国产精品高清 国产目拍亚洲精品99久久精品 | 成人久久 | 成人欧美一区二区三区在线播放 | 国内自拍视频在线观看 | 青青久久网 | 国产成人免费在线 | 影视在线观看 | 国产精品久久久久久久久久99 | 黄网站涩免费蜜桃网站 | 亚洲性视频 | 99久久精品一区二区成人 | 成人网在线观看 | 亚洲国产精品精华液com | 久久国产一区视频 | 91操操 | 蜜桃视频在线观看www社区 | 男人天堂视频网 | 性色av一区二区三区免费看开蚌 | 91精品电影 | 黄色a视频 | 国产亚洲一区二区三区在线观看 | 欧美一区永久视频免费观看 | 久久成人国产视频 | 91精品久久久久久久久久入口 | 国产小视频在线 | 99精品亚洲| 日韩二区三区 | 日韩欧美国产一区二区 | 亚洲精品视频免费 | 日本精品免费在线观看 | 欧美久久不卡 | 日本黄色a级 | 日本中文字幕电影 | 国产一区二区三区免费观看 | 亚洲精品电影在线一区 | 国产一区二区久久久 | 国产美女久久 | 日韩视频免费在线观看 | 在线免费观看色视频 | 亚洲精品久久 | 91婷婷射| 久久青青 | 亚洲专区国产精品 | 亚洲一区二区三区四区在线观看 | 天天干天天躁 | 99热成人在线| 国产美女久久久 | 国产午夜手机精彩视频 | 在线观看一级片 | 黄a在线观看| 日韩一二三区在线观看 | 九色av| 国产精品久久久久久久久 | 久久国产区 | 日韩精品免费观看 | 久久综合亚洲 | 中文字幕69av | 精品国产乱码简爱久久久久久 | 亚洲一区综合 | 中文字幕亚洲在线 | 国产精品一区二区无线 | 九九九色 | 91啪影院| 欧美久久视频 | 精品一区二区三区在线观看 | 国产中文字幕在线 | 欧美区国产区 | 久久久久久久国产精品 | 亚洲精品乱码久久久久久蜜桃91 | 蜜桃一区二区 | 日韩欧美国产精品综合嫩v 国产高清av在线一区二区三区 | 白浆在线播放 | 日本精品在线 | 中文在线a在线 | 国产精选久久 | 亚洲精品18 | 午夜私人影院 | 国产一区二区三区四区在线观看 | 国产精品国产精品国产 | 国产精品成人在线观看 | 久久精品福利 | 日韩在线成人av | 日本精品一区 | 成人在线视频免费观看 | 欧美精品在线观看免费 | 亚洲精品欧美 | 欧美亚洲国产一区二区三区 | 欧美在线三级 | 中文字幕亚洲一区 | 亚洲一区二区在线 | 国产伊人一区 | www.888www看片 | 欧美成人激情视频 | 午夜免费观看网站 | 久久综合九色综合欧美狠狠 | 91中文在线观看 | 国产精品毛片一区二区三区 | 亚洲精品国产综合 | 91.成人天堂一区 | 中文字幕视频三区 | 国产一区二区欧美 | 99re在线视频| 日本精品一区二区三区视频 | 色综合久久久久 | 久久99精品久久久久久琪琪 | 在线成人免费观看www | 国产成人在线视频 | 免费黄色片一区二区 | 九九r热| 欧美一级在线观看视频 | 男人天堂视频网 | 99九九久久| 日韩精品一区二区三区四区 | 91麻豆精品久久久久蜜臀 | www.成人| 深夜福利1000 | 久久久国产视频 | 国产乱叫456| 一区二区精品视频 | 国产亚洲欧美在线 | 在线免费观看日韩视频 | www久久精品| 成人国产综合 | 欧美精品1区2区3区 国产女无套免费网站 | 成人精品久久 | 在线一区观看 | 在线免费观看一区 | 欧美在线观看一区 | 欧美日韩国产精品一区二区亚洲 | 三级成人片| 青青草一区 | 欧美日一区 | 四虎影院网站 | 欧美一级一区 | 亚洲欧洲一区二区 | 国产主播福利 | www.99精品| 日本免费一区二区三区 | 欧美一区二区在线看 | 亚洲九九| 成人欧美一区二区三区白人 | 中文字幕日韩欧美 | 另类一区 | 99视频免费 | 国产精品久久在线观看 | 综合久久综合久久 | 成人久久18免费观看 | 夜夜爽99久久国产综合精品女不卡 | 久久99深爱久久99精品 | 亚洲精品视频在线观看免费 | 久久久日韩精品一区二区三区 | 国产成人影院 | 久久精品国产免费 | 色xx综合网 | 欧美日韩国产在线观看 | 在线观看污片 | 日韩精品免费在线视频 | 久久精品首页 | 99亚洲国产 | 日日操夜夜操天天操 | 久久青青| 国产精品毛片久久久久久久 | 欧美综合精品 | 中文字幕亚洲一区二区三区 | 国产一区在线免费观看 | 日韩中文字幕免费视频 | 有码在线 | 亚洲成人中文字幕 | 欧美一区二区三区成人 | 色综合一区| 在线视频成人永久免费 | 亚洲精品免费视频 | 高清三区 | 欧美国产精品 | 亚洲欧洲精品在线 | 精品国产欧美一区二区三区成人 | jlzzjlzz国产精品久久 | 在线视频中文字幕 | 亚州国产精品 | 日本黄色大片免费 | 亚洲在线观看免费视频 | 国产一区二区影院 | 波多野结衣 一区二区三区 精品精品久久 | 日韩精品在线观看免费 | 国产精品一二三区视频 | 亚洲特级 | 久久人人爽人人爽人人片av软件 | 四虎永久在线观看 | 欧美a网| 欧美一区二区三区在线观看视频 | 久久9国产偷伦 | 日韩精品视频三区 | 久久精品一级 | 亚洲精品第一 | 中文字幕在线资源 | 91九色国产视频 | 欧美一区二区三区精品 | 91伦理片| 色婷婷av久久久久久久 | 亚洲 欧美 日韩 丝袜 另类 | 成人av网站免费观看 | 国产一级一级毛片女人精品 | 国产精品自产av一区二区三区 | 色婷婷导航 | 国产一区二区三区四区视频 | 五月婷婷丁香婷婷 | 国产免费黄视频 | 黄色国产一级视频 | 久久久国产视频 | 日韩福利在线观看 | 视频一区二区三区免费观看 | 乱人伦xxxx国语对白 | 免费看片色| 久久亚洲一区 | 龙珠z普通话国语版在线观看 | 欧美一级免费 | 欧美日韩国产精品一区二区 | 伊人热久久婷婷 | 欧美午夜在线观看 | 一区二区三区免费在线 | 国产精品一区二 | 亚洲一区中文字幕在线观看 | 美女一区二区三区在线观看 | 一级免费视频 | 欧美日韩视频 | 91免费版在线观看 | 免费毛片在线播放 | 骚视频在线观看 | 91社区影院 | 国产高清在线精品一区二区三区 | 九九免费视频 | 嫩草懂你| 国产欧美精品一区二区三区四区 | 亚洲综合区 | 亚洲国产精品一区 | 免费av黄色 | 欧美精品一区二区三区蜜桃视频 | 99视频精品 | 国产精品成人一区二区三区夜夜夜 | 国产精品人人做人人爽 | 超碰在线国产 | 欧美日韩在线综合 | 啪啪的网站| 欧美亚洲国产一区二区三区 | www.99精品 | 91在线网址| 久久成人免费 | 天天澡天天狠天天天做 | 久久r免费视频 | 国产精品久久久久久无遮挡 | 日本1区2区 | 国内精品久久久久国产 | 免费av一区二区三区 | 亚洲一区二区三区在线观看免费 | avmans最新导航地址 | 欧美一区二区三区男人的天堂 | 欧美久久一级特黄毛片 | 超碰人人艹 | www..99re| 国产亚洲二区 | 精品国产乱码简爱久久久久久 | 亚洲一区二区精品视频 | 激情五月综合网 | 日韩中文字幕a | 精品在线一区二区三区 | 美女久久一区 | 中文字幕高清视频 | 国产精品一区二区三 | 国产精品亚洲一区二区三区在线 | 日韩一区二区中文字幕 | 中文字幕在线看第二 | 日韩电影免费在线观看中文字幕 | 国厂黄色片| 欧美大成色www永久网站婷 | 亚洲精品中文字幕中文字幕 | 精品久久久久久久久久久久久久 | 99爱在线观看 | 欧美一区二区三区视频 | 激情综合网五月婷婷 | 亚洲黄色国产 | 亚洲国产成人在线 | 日韩欧美精品一区 | 亚洲黄色一级毛片 | 亚洲tv久久爽久久爽 | 国产一区二区成人 | 亚洲欧美一区二区三区在线 | 黄色一级免费大片 | 久久久久久精 | 在线观看亚洲大片短视频 | 国产欧美高清在线观看 | 国产视频久久 | 国产成人激情 | 激情毛片| www.久草.com | 日韩一二三区视频 | 日韩一区二区三区在线观看 | 日韩精品一区二区在线观看 | 免费高潮视频95在线观看网站 | 久久精品1区 | 国产日韩欧美精品 | 欧美日韩干 | 久久久精品影院 | 伊人久久一区二区三区 | 欧美一区二区在线视频 | 亚洲福利一区 | 日本久久影视 | 神马久久久久久久 | 久久99国产精品久久99大师 | 日韩极品视频 | 精品在线看 | 国产依人在线 | 欧美激情一区二区三级高清视频 | 国产成人一区二区三区 | 在线一级电影 | 一级毛片电影院 | 国产中文区二幕区2012 | 高清av网址 | 五月激情综合婷婷 | 一区二区三区四区免费观看 | 久久国产欧美一区二区三区精品 | 中文字幕亚洲第一 | 国产一级毛片国语一级 | 91尤物网站网红尤物福利 | 四虎com| 国产成人精品综合 | 日韩城人网站 | a级在线免费 | 伊人网综合视频 | 2020天天操| 精品国产三级 | 精品久久ai | 久久综合九九 | 日韩日b视频| 国产成人高清在线 | 久久精品久久久 | 91麻豆精品国产91久久久资源速度 | 欧美日韩久久久久 | 91人人 | 国产精品一区二区三区四区 | 中文字幕成人av | 电影91久久久 | 亚洲高清在线视频 | 中国1级黄色片 | 亚洲精品视频在线观看免费 | 成人亚洲免费视频 | 97久久超碰 | 欧洲视频一区二区 | 精品久久久久久久久久久久久久 | 国产精品无码久久久久 | 久章操 | 国产精品69久久久久水密桃 | 久久国产一区二区 | 亚洲一区二区三区免费观看 | 91亚洲精品久久久 | 久久99精品久久久 | 97av在线视频 | 日本精品视频在线播放 | 国产一区二区在线免费 |