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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

专有云传统HSF升级Pandora Boot开发

發(fā)布時間:2024/9/3 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 专有云传统HSF升级Pandora Boot开发 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
簡介:專有云傳統(tǒng)HSF升級Pandora Boot開發(fā)

本次最佳實踐,分析傳統(tǒng)HSF應(yīng)用的劣勢及升級至Pandora Boot開發(fā)的優(yōu)勢。將結(jié)合HSF代碼和Pandora Boot代碼進行詳解傳統(tǒng)HSF應(yīng)用如何升級至Pandora Boot開發(fā)。

背景信息

HSF開發(fā)應(yīng)用的劣勢在于HSF要使用指定的Ali-Tomcat容器,還需要在Ali-Tomcat等容器中加入sar包擴展,對用戶運行環(huán)境的侵入性大。而HSF開發(fā)的應(yīng)用程序最終以WAR包的形式運行,不符合微服務(wù)設(shè)計的輕量應(yīng)用理念。并且開發(fā)過程注入Bean需要編寫較多的xml文件配置。

而Pandora Boot開發(fā)應(yīng)用的優(yōu)勢就在于依賴容器Pandora,不需要Ali-Tomcat。而且Pandora Boot開發(fā)也兼容了完整的HSF功能,同時與Spring Boot無縫集成。所以使用Pandora Boot的同時也可以引入Spring Boot提供開箱即用的依賴模板。快速、敏捷的開發(fā)Spring框架的應(yīng)用程序,享受開發(fā)的便利。

Pandora Boot開發(fā)的應(yīng)用最終以FatJar包的形式運行,并且Pandora環(huán)境也可以直接在IDE中啟動,開發(fā)調(diào)試等效率將得到極大的提高。而Pandora Boot注入Bean通過注解的方式,也減少了繁雜的xml配置文件編寫,提高開發(fā)效率。

因為在傳統(tǒng)客戶中有HSF應(yīng)用升級至Pandora Boot開發(fā)的需求,所以針對客戶的需要,本次最佳實踐將詳細描述傳統(tǒng)HSF應(yīng)用和PandoraBoot應(yīng)用的開發(fā),使單體微服務(wù)應(yīng)用的敏捷開發(fā)及拓展性有所提高。

HSF環(huán)境介紹及準備

產(chǎn)品組件

  • Ali-Tomcat是EDAS中的服務(wù)運行依賴的一個容器,支持Servlet 3.0規(guī)范,支持WebSocket。包含服務(wù)的發(fā)布、訂閱、調(diào)用鏈追蹤等一系列的核心功能。
  • Pandora是一個輕量級的隔離容器-taobao-hsf.sar,它用來隔離Webapp和中間件的依賴,也用來隔離中間件之間的依賴,并實現(xiàn)部署與應(yīng)用分離。
  • 輕量級配置中心(Diamond)是淘寶內(nèi)部廣泛使用的配置中心,提供持久化管理和動態(tài)配置推送服務(wù)。應(yīng)用方發(fā)布的配置會通過持久化存儲保存,與發(fā)布者的生命周期無關(guān)。
  • 動態(tài)配置推送是Diamond的核心功能,在淘寶內(nèi)部有很多應(yīng)用場景,如數(shù)據(jù)庫動態(tài)切換和擴容,業(yè)務(wù)系統(tǒng)開關(guān)配置運行時變更等。
  • 輕量級注冊中心(ConfigServer):主要用于非持久數(shù)據(jù)的發(fā)布和訂閱、數(shù)據(jù)的生命周期和TCP連接生命周期綁定、產(chǎn)品架構(gòu)基于發(fā)布訂閱模型和去中心無master設(shè)計,保證了系統(tǒng)的可擴展性、高可用。在集團內(nèi)部主要場景為分布式消息系統(tǒng)Notify、分布式RPC框架HSF提供地址發(fā)現(xiàn)服務(wù)。

基本結(jié)構(gòu)

HSF結(jié)構(gòu)分為6個部分,共同組合在一起可以提供全功能的分布式服務(wù),分別是:

  • 服務(wù)消費方:消費服務(wù)提供方提供的服務(wù),服務(wù)消費者通過地址注冊中心訂閱服務(wù),根據(jù)訂閱到的地址信息發(fā)起調(diào)用,地址注冊中心作為旁路不參與調(diào)用。
  • 服務(wù)提供方: 在服務(wù)框架中真正提供服務(wù)功能實現(xiàn)的應(yīng)用實例,為了保障服務(wù)提供的高可用性,一般均是集群部署,同時將地址信息發(fā)布到地址注冊中心。
  • 地址注冊中心:接受服務(wù)提供方發(fā)布的地址,當(dāng)服務(wù)消費方根據(jù)服務(wù)進行訂閱時,會將地址信息推送給服務(wù)消費方,注冊中心就是服務(wù)信息的中介,提供服務(wù)發(fā)現(xiàn)的能力
  • 持久化配置中心:持久化的配置中心用于存儲 HSF 服務(wù)的各種治理規(guī)則,HSF 客戶端在啟動的過程中會向持久化配置中心訂閱各種服務(wù)治理規(guī)則,如路由規(guī)則、歸組規(guī)則、權(quán)重規(guī)則等,從而根據(jù)規(guī)則對調(diào)用過程的選址邏輯進行干預(yù)。
  • 元數(shù)據(jù)存儲中心:元數(shù)據(jù)是指 HSF 服務(wù)對應(yīng)的方法列表以及參數(shù)結(jié)構(gòu)等信息,元數(shù)據(jù)不會對 HSF 的調(diào)用過程產(chǎn)生影響,因此元數(shù)據(jù)存儲中心也并不是必須的。但考慮到服務(wù)運維的便捷性,HSF客戶端在啟動時會將元數(shù)據(jù)上報到元數(shù)據(jù)存儲中心,以便提供給服務(wù)運維使用
  • HSF運維平臺(HSF控制臺):HSF 控制臺通過打通地址注冊中心 ConfigServer、持久化配置中心 Diamond、元數(shù)據(jù)存儲中心Redis,為用戶提供了一些列服務(wù)運維功能,包括服務(wù)查詢、服務(wù)治理規(guī)則管理、服務(wù)測試、服務(wù) Mock、單機運維等,旨在提高 HSF 服務(wù)研發(fā)的效率、運維的便捷性。

環(huán)境準備流程步驟

在進行開發(fā)前,需要準備以下基本內(nèi)容:

  • JDK基礎(chǔ)運行環(huán)境:正確安裝JDK 7+,正確配置JAVA_HOME環(huán)境變量。
  • MAVEN環(huán)境及構(gòu)建HSF MAVEN工程:添加打war包與HSF開發(fā)編譯依賴。
  • 開發(fā)IDE:推薦Eclipse或IDEA。
  • Eclipse配置:Tomcat4e插件+Pandora配置。
  • IDEA:配置AliTomcat+Pandora。
  • 輕量級配置中心:HSF服務(wù)的發(fā)布與訂閱。
  • Pandora Boot環(huán)境介紹及準備

    產(chǎn)品組件

    • Pandora:一個輕量級的隔離容器-taobao-hsf.sar,它用來隔離Webapp和中間件的依賴,也用來隔離中間件之間的依賴,也實現(xiàn)部署與應(yīng)用分離。
    • 輕量級配置及注冊中心:對于開發(fā)者可以在本地使用輕量級配置及注冊中心實現(xiàn)應(yīng)用的注冊、發(fā)現(xiàn)與配置管理,完成應(yīng)用的開發(fā)和測試。本地開發(fā)完應(yīng)用托管到EDAS服務(wù)上,EDAS內(nèi)置注冊及配置中心,因此注冊及配置功能仍然可以正常使用。

    基本結(jié)構(gòu)

    HSF結(jié)構(gòu)分為6個部分,共同組合在一起可以提供全功能的分布式服務(wù),分別是:

    • 服務(wù)消費方:消費服務(wù)提供方提供的服務(wù),服務(wù)消費者通過地址注冊中心訂閱服務(wù),根據(jù)訂閱到的地址信息發(fā)起調(diào)用,地址注冊中心作為旁路不參與調(diào)用。
    • 服務(wù)提供方: 在服務(wù)框架中真正提供服務(wù)功能實現(xiàn)的應(yīng)用實例,為了保障服務(wù)提供的高可用性,一般均是集群部署,同時將地址信息發(fā)布到地址注冊中心。
    • 地址注冊中心:接受服務(wù)提供方發(fā)布的地址,當(dāng)服務(wù)消費方根據(jù)服務(wù)進行訂閱時,會將地址信息推送給服務(wù)消費方,注冊中心就是服務(wù)信息的中介,提供服務(wù)發(fā)現(xiàn)的能力
    • 持久化配置中心:持久化的配置中心用于存儲 HSF 服務(wù)的各種治理規(guī)則,HSF 客戶端在啟動的過程中會向持久化配置中心訂閱各種服務(wù)治理規(guī)則,如路由規(guī)則、歸組規(guī)則、權(quán)重規(guī)則等,從而根據(jù)規(guī)則對調(diào)用過程的選址邏輯進行干預(yù)。
    • 元數(shù)據(jù)存儲中心:元數(shù)據(jù)是指 HSF 服務(wù)對應(yīng)的方法列表以及參數(shù)結(jié)構(gòu)等信息,元數(shù)據(jù)不會對 HSF 的調(diào)用過程產(chǎn)生影響,因此元數(shù)據(jù)存儲中心也并不是必須的。但考慮到服務(wù)運維的便捷性,HSF客戶端在啟動時會將元數(shù)據(jù)上報到元數(shù)據(jù)存儲中心,以便提供給服務(wù)運維使用
    • HSF運維平臺(HSF控制臺):HSF 控制臺通過打通地址注冊中心 ConfigServer、持久化配置中心 Diamond、元數(shù)據(jù)存儲中心Redis,為用戶提供了一些列服務(wù)運維功能,包括服務(wù)查詢、服務(wù)治理規(guī)則管理、服務(wù)測試、服務(wù) Mock、單機運維等,旨在提高 HSF 服務(wù)研發(fā)的效率、運維的便捷性。

    環(huán)境準備流程步驟

    在進行開發(fā)前,需要準備一下基本內(nèi)容:

  • JDK基礎(chǔ)運行環(huán)境:正確安裝JDK 7+,正確配置JAVA_HOME環(huán)境變量。
  • MAVEN環(huán)境及構(gòu)建Pandora Boot MAVEN工程:添加打FatJar包與Pandora Boot開發(fā)編譯依賴。
  • 開發(fā)IDE:推薦Eclipse或IDEA。
  • Eclipse配置:啟動Pandora Boot應(yīng)用主函數(shù)自動加載Pandora容器。
  • IDEA配置:啟動Pandora Boot應(yīng)用主函數(shù)自動加載Pandora容器。
  • 輕量級注冊及配置中心:Pandora Boot應(yīng)用的注冊、發(fā)現(xiàn)及配置管理。
  • HSF開發(fā)流程及流程圖

    開發(fā)流程節(jié)點:

  • 服務(wù)接口:HSF的服務(wù)基于接口實現(xiàn),接口需在服務(wù)設(shè)計時預(yù)先定義設(shè)計好,生產(chǎn)者將實現(xiàn)該接口以提供具體的實現(xiàn)來提供服務(wù),消費者也是基于此接口作為服務(wù)去訂閱。
  • 服務(wù)生產(chǎn)者:生產(chǎn)者將實現(xiàn)之前定義的服務(wù)接口以提供具體實現(xiàn),除了代碼實現(xiàn)的工作之外,由于HSF是基于Spring框架來實現(xiàn)的,所以還需要再定義服務(wù)發(fā)布的XML文件。
  • 服務(wù)消費者:消費者基于接口使用服務(wù),具體調(diào)用時需要做兩個步驟
  • Pandora Boot 的配置文件使用注解@HSFConsumer定義好一個 Bean。
  • 在使用的時候從 Spring 的 context 中將 Bean 取出。
  • 圖 1.?流程圖

    開發(fā)HSF應(yīng)用

    背景信息

  • 無縫兼容:HSF與Spring無縫兼容,標準用法使用Spring的xml配置。
  • 標準schema:提供hsf:provider,hsf:consumer兩個標準的xml格式。
  • 代碼無侵入:使用xml方式開發(fā)時,代碼不需要感知HSF框架,而且POM中只需要引入edas-sdk。
  • 框架與WAR包分離:最終輸入的war,不需要包含HSF框架,HSF框架依賴AliTomcat+Pandora方式提供。
  • 您需要按以下步驟構(gòu)建HSF maven工程:

  • 構(gòu)建maven工程,創(chuàng)建完maven工程后,在pom.xml文件中定義添加edas-sdk和spring的依賴。
  • <dependencies> <!-- 添加 servlet 的依賴 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6</version> <type>jar</type> <scope>compile</scope> </dependency> <!-- 添加 edas-sdk 的依賴 --> <dependency> <groupId>com.alibaba.edas</groupId> <artifactId>edas-sdk</artifactId> <version>1.5.4</version> </dependency> </dependencies>
  • 在pom.xml文件中添加HSF應(yīng)用的maven打包插件。
  • <build> <finalName>itemcenter</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build>

    定義服務(wù)接口

    HSF服務(wù)基于接口實現(xiàn)調(diào)用,定義好接口Sayhello后,生產(chǎn)者將使用該接口實現(xiàn)具體的服務(wù),消費者也基于此接口訂閱服務(wù),所以一般會將接口定義在一個工程中,它會打成一個jar包,發(fā)布到maven倉庫中。下面是公共模塊edasdemo-api接口定義代碼:

    package com.edas.demo; public interface Sayhello { public String sayHello(); public String sayHello(String name); }

    編寫HSF服務(wù)提供者

  • 編寫HSF提供者服務(wù)除構(gòu)建HSF maven工程外,服務(wù)提供者需要在pom.xml文件中引入公共模塊工程的依賴。
  • <dependency> <groupId>com.edas.demo</groupId> <artifactId>edasdemo-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
  • 服務(wù)提供者實現(xiàn)接口提供具體的服務(wù),然后發(fā)布對應(yīng)的服務(wù)。
  • package com.edas.demo; public class SayhelloImpl implements Sayhello { public String sayHello() { System.out.println("INFO:執(zhí)行一次Hello"); return "Hello!"; } public String sayHello(String name) { return "你好"+name; } }
  • 在hsf-provider-beans.xml中Spring配置HSF服務(wù)。
  • <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hsf="http://www.taobao.com/hsf" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.taobao.com/hsf http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName"> <bean id="sayHello" class="com.edas.demo.SayhelloImpl" /> <!-- 提供一個服務(wù)示例 --> <hsf:provider id="sayHelloProvider" interface="com.edas.demo.Sayhello" ref="sayHello" version="1.0.0"> </hsf:provider> </beans>

    編寫HSF服務(wù)消費者

  • 編寫消費者服務(wù)除構(gòu)建HSF maven工程外,服務(wù)消費者需要在pom.xml文件中引入公共模塊工程的依賴。
  • <dependency> <groupId>com.edas.demo</groupId> <artifactId>edasdemo-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
  • 在hsf-consumer-beans.xml中Spring配置HSF服務(wù)。
  • <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hsf="http://www.taobao.com/hsf" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.taobao.com/hsf http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName"> <!-- 消費一個服務(wù)示例 --> <hsf:consumer id="sayHello" interface="com.edas.demo.Sayhello" version="1.0.0"> </hsf:consumer> </beans>
  • 編寫服務(wù)消費者基于接口調(diào)用服務(wù)提供者的代碼SayhelloServlet。
  • public class SayhelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; public SayhelloServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()); // 根據(jù) Spring 配置中的 Bean ID "item" 獲取訂閱到的服務(wù) final Sayhello sayHello = (Sayhello) ctx.getBean("sayHello"); Thread thread = new Thread( new Runnable() { @Override public void run() { while ( true ) { try { Thread.sleep(500l); System.out.println(sayHello.sayHello()); System.out.println(sayHello.sayHello("tom")); } catch ( Throwable e ) { e.printStackTrace(); } } } }); thread.start(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

    開發(fā)HSF異步調(diào)用

    異步調(diào)用

    對于客戶端來說,并不是所有的HSF服務(wù)都需要同步等待服務(wù)端返回結(jié)果,對于這些場景,HSF提供異步調(diào)用的方式,讓客戶端不必同步阻塞在HSF操作上。在HSF服務(wù)發(fā)起異步調(diào)用,調(diào)用結(jié)果都是返回的默認值。而真正的結(jié)果要在HSFResponseFuture或者回調(diào)函數(shù)callback中獲取。

    Futrue異步調(diào)用

    HSF與Spring框架無縫集成,可以使用Spring XML的方式進行Future異步調(diào)用配置。


    <bean id="orderService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean"> <property name="interfaceName" value="com.alibaba.middleware.hsf.guide.api.service.OrderService"/> <property name="version" value="1.0.0"/> <property name="group" value="HSF"/> <!--[設(shè)置] 訂閱服務(wù)的接口--> <property name="asyncallMethods"> <list> <value>name:queryOrder;type:future</value> </list> </property> </bean>

    Callback異步調(diào)用

    使用Spring XML進行Callback異步調(diào)用配置。


    <bean id="CallHelloWorld" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean"> <property name="interfaceName" value="com.alibaba.middleware.hsf.guide.api.service.OrderService"/> <property name="version" value="1.0.0"/> <property name="group" value="HSF"/> <property name="asyncallMethods"> <list> <!--name:methodName;type:future|callback--> <value>name:queryOrder;type:callback;listener:com.alibaba.middleware.hsf.CallbackHandler</value> </list> </property> </bean>

    開發(fā)HSF泛化調(diào)用

    背景信息

    相對于依賴業(yè)務(wù)客戶端Jar包的正常調(diào)用,需要依賴二方包,使用特定的GenericService接口,而傳入需要調(diào)用的方法名,方法簽名和參數(shù)值進行調(diào)用服務(wù)。泛化調(diào)用更適用于一些網(wǎng)關(guān)應(yīng)用,其中hsfops服務(wù)測試也是依賴泛化調(diào)用功能。

    API形式配置HSF服務(wù)

    將HSFConsumerBean,配置generic為true,標識客戶端忽略加載不到接口的異常。


    HSFApiConsumerBean hsfApiConsumerBean = new HSFApiConsumerBean(); hsfApiConsumerBean.setInterfaceName("com.alibaba.middleware.hsf.guide.api.service.OrderService"); hsfApiConsumerBean.setVersion("1.0.0"); hsfApiConsumerBean.setGroup("HSF"); // [設(shè)置] 泛化配置 hsfApiConsumerBean.setGeneric("true"); hsfApiConsumerBean.init(true); //使用泛化接口獲取代理 GenericService genericOrderService = (GenericService) hsfApiConsumerBean.getObject(); // ---------------------- 調(diào)用 -----------------------// // [調(diào)用] 發(fā)起HSF泛化調(diào)用, 返回map類型的result。 Map orderModelMap = (Map) genericOrderService.$invoke("queryOrder", new String[] { Long.class.getName() }, new Object[] { 1L });

    GenericService提供的$invoke方法包含了真實調(diào)用的方法名、入?yún)㈩愋秃蛥?shù),以便服務(wù)端找到改方法。由于沒有依賴服務(wù)端的API jar包,傳入的參數(shù)如果是自定義的DTO,需要轉(zhuǎn)成客戶端可以序列化的Map類型。

    Spring配置HSF服務(wù)

    上面描述了通過API配置HSF服務(wù),也可以通過Spring XML配置HSF服務(wù)。


    <bean id="CallHelloWorld" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean"> <!--[設(shè)置] 訂閱服務(wù)的接口--> <property name="interfaceName" value="com.alibaba.middleware.hsf.guide.api.service.OrderService"/> <!--[設(shè)置] 服務(wù)的版本--> <property name="version" value="1.0.0"/> <!--[設(shè)置] 服務(wù)的歸組--> <property name="group" value="HSF"/> <property name="generic" value="true"/> </bean>

    調(diào)用上下文

    背景信息

    請求上下文包括一次性調(diào)用相關(guān)的屬性,比如調(diào)用的地址,調(diào)用方的應(yīng)用名,超時時間等屬性和用戶在接口定義的參數(shù)之外傳遞自定義的數(shù)據(jù)。

    設(shè)置和獲取本次調(diào)用上下文

    com.taobao.hsf.util.RequestCtxUtil提供設(shè)置和獲取調(diào)用上下文的靜態(tài)方法,基于ThreadLocal工作,getXXX操作會將XXX屬性從當(dāng)前ThreadLocal變量中remove掉,僅作用于當(dāng)前線程的單次調(diào)用。

    ?表1. 客戶端

    名稱描述
    setRequestTimeout()設(shè)置單次調(diào)用的超時時間
    setUserId()設(shè)置本次調(diào)用的單元化服務(wù)的userId(泛化調(diào)用中需要通過此方法配置)
    getProviderIp()獲取【最近一次】調(diào)用的服務(wù)端的IP
    setTargetServerIp(String ip)設(shè)置當(dāng)前線程下一次調(diào)用的目標服務(wù)器IP(此IP必須包含在內(nèi)存已提供服務(wù)的地址列表里)
    setDirectTargetServerIp(String targetIp)設(shè)置當(dāng)前線程下一次調(diào)用的目標服務(wù)器IP(繞過注冊中心,忽略內(nèi)存里的地址列表)


    表 2.?服務(wù)端

    名稱描述
    getClientIp()服務(wù)端獲取調(diào)用方IP
    getAppNameOfClient()服務(wù)端獲取調(diào)用方的應(yīng)用名
    isHttpRequest()是否是http調(diào)用
    getHttpHeader(String key)獲取http請求的header屬性


    傳遞自定義請求上下文

    RpcContext提供一種不修改接口,向服務(wù)端額外傳遞數(shù)據(jù)的方式。參數(shù)可以是自定義的DO或者基本類型。要保證對端也有該對應(yīng)的類型,并且可以能夠被序列化。

  • 傳遞自定義上下文開發(fā)示例 ,在構(gòu)建的Maven項目中導(dǎo)入下面依賴。
  • <dependency> <groupId>com.taobao.hsf</groupId> <artifactId>hsf-feature-context</artifactId> </dependency>
  • 客戶端發(fā)起調(diào)用前,設(shè)置上下文。
  • RPCContext rpcContext = RPCContext.getClientContext(); rpcContext.putAttachment("tetantId", "123"); orderService.queryOrder(1L);
  • 服務(wù)端業(yè)務(wù)方法內(nèi),獲取上下文。
  • RPCContext rpcContext = RPCContext.getServerContext(); String myContext = (String)rpcContext.getAttachment("tetantId");

    配置序列化

    序列化的過程是將JAVA對象轉(zhuǎn)成byte數(shù)組在網(wǎng)絡(luò)中傳輸,反序列化會將byte數(shù)組轉(zhuǎn)成JAVA對象。

    序列化方式配置

    序列化的選擇需要考慮兼容性,性能等因素,HSF的序列化方式支持JAVA、hessian、hessian2、JSON、kyro,默認是hessian2。這些序列化方式的對比和配置(只在服務(wù)端配置HSFApiProviderBean)如下表所示:

    序列化方式maven依賴配置兼容性性能
    hessian2<artifactId>hsf-io-serialize-hessian2</artifactId>setPreferSerializeType("hessian2")
    java<artifactId>hsf-io-serialize-java</artifactId>setPreferSerializeType("java")最好一般
    fastjson<artifactId>hsf-io-serialize-json</artifactId>setPreferSerializeType("json")
    kryo<artifactId>hsf-io-serialize-kryo</artifactId>setPreferSerializeType("kryo")一般最好


    API形式配置HSF服務(wù)


    HSFApiProviderBean hsfApiProviderBean = new HSFApiProviderBean(); hsfApiProviderBean.setPreferSerializeType("hessian2");

    Spring配置HSF服務(wù)

    Spring框架是在應(yīng)用中廣泛使用的組件,如果不想通過API的形式配置HSF服務(wù),可以使用Spring XML的形式進行配置,上述例子中的API配置等同于如下XML配置:


    <bean class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init"> <!--[設(shè)置] 發(fā)布服務(wù)的接口--> <property name="serviceInterface" value="com.alibaba.middleware.hsf.guide.api.service.OrderService"/> <!--[設(shè)置] 服務(wù)的實現(xiàn)對象 target必須配置[ref],為需要發(fā)布為HSF服務(wù)的spring bean id--> <property name="target" ref="引用的BeanId"/> <!--[設(shè)置] 服務(wù)的版本--> <property name="serviceVersion" value="1.0.0"/> <!--[設(shè)置] 服務(wù)的歸組--> <property name="serviceGroup" value="HSF"/> <!--[設(shè)置] 服務(wù)的響應(yīng)時間--> <property name="clientTimeout" value="3000"/> <!--[設(shè)置] 服務(wù)傳輸業(yè)務(wù)對象時的序列化類型--> <property name="preferSerializeType" value="hessian2"/> </bean>

    超時設(shè)置

    背景信息

    有關(guān)網(wǎng)絡(luò)調(diào)用的請求,都需要配置超時,HSF的默認超時時間是3000ms。客戶端和服務(wù)端都可以設(shè)置超時,默認優(yōu)先采用客戶端的配置,如果客戶端沒有配置,使用服務(wù)端的超時配置。在服務(wù)端設(shè)置超時時,需要考慮到業(yè)務(wù)本身的執(zhí)行耗時,加上序列化和網(wǎng)絡(luò)通訊的時間。所以推薦服務(wù)端給每個服務(wù)都配置個默認的時間。當(dāng)然客戶端也可以根據(jù)自己的業(yè)務(wù)場景配置超時時間,比如一些前端應(yīng)用,需要用戶快速看到結(jié)果,可以把超時時間設(shè)置小一些。

    客戶端超時配置

    客戶端超時配置有以下兩種方式:

    • API形式配置HSF服務(wù),配置HSFApiConsumerBean的clientTimeout屬性,單位是ms,我們把接口的超時配置為1000ms,方法queryOrder配置為100ms,代碼如下:
    HSFApiConsumerBean consumerBean = new HSFApiConsumerBean(); //接口級別超時配置 consumerBean.setClientTimeout(1000); //xxx MethodSpecial methodSpecial = new MethodSpecial(); methodSpecial.setMethodName("queryOrder"); //方法級別超時配置,優(yōu)先于接口超時配置 methodSpecial.setClientTimeout(100); consumerBean.setMethodSpecials(new MethodSpecial[]{methodSpecial});
    • Spring配置HSF服務(wù),上述例子中的API配置等同于如下XML配置:
    <bean id="CallHelloWorld" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean"> ... <property name="clientTimeout" value="1000" /> <property name="methodSpecials"> <list> <bean class="com.taobao.hsf.model.metadata.MethodSpecial"> <property name="methodName" value="queryOrder" /> <property name="clientTimeout" value="100" /> </bean> </list> </property> ... </bean>

    服務(wù)端超時配置

    服務(wù)端超時配置也有兩種不同的方式:

    • API形式配置HSF服務(wù),配置HSFApiProviderBean的clientTimeout屬性,單位是ms,代碼如下:
    HSFApiProviderBean providerBean = new HSFApiProviderBean(); //接口級別超時配置 providerBean.setClientTimeout(1000); //xxx MethodSpecial methodSpecial = new MethodSpecial(); methodSpecial.setMethodName("queryOrder"); //方法級別超時配置,優(yōu)先于接口超時配置 methodSpecial.setClientTimeout(100); providerBean.setMethodSpecials(new MethodSpecial[]{methodSpecial});
    • Spring配置HSF服務(wù),上述例子中的API配置等同于如下XML配置:
    <bean class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init"> ... <property name="clientTimeout" value="1000" /> <property name="methodSpecials"> <list> <bean class="com.taobao.hsf.model.metadata.MethodSpecial"> <property name="methodName" value="queryOrder" /> <property name="clientTimeout" value="2000" /> </bean> </list> </property> ... </bean>

    服務(wù)端線程池配置

    HSF服務(wù)端線程池主要分為IO線程和業(yè)務(wù)線程,其中IO線程模型就是netty reactor網(wǎng)絡(luò)模型中使用的。

    默認線程池配置

    服務(wù)端線程池是用來執(zhí)行業(yè)務(wù)邏輯的線程池,線程池默認的core size是50,max size是720,keepAliveTime 500s。隊列使用的是SynchronousQueue,沒有緩存隊列,不會堆積用戶請求。 當(dāng)服務(wù)端線程池所有線程(720)都在處理請求時,對于新的請求,會立即拒絕,返回Thread pool is full異常。可以使用下面VM參數(shù)(-D參數(shù))進行配置。

    • 線程池最小配置:-Dhsf.server.min.poolsize
    • 線程池最大的配置:-Dhsf.server.max.poolsize
    • 線程收斂的存活時間:-Dhsf.server.thread.keepalive

    服務(wù)線程池配置

    對于一些慢服務(wù)、并發(fā)高,可以為其單獨配置線程池,以免占用過多的業(yè)務(wù)線程,影響應(yīng)用的其他服務(wù)的調(diào)用,你可以通過以下兩種方式配置HSF應(yīng)用:

    • API形式配置HSF應(yīng)用:
    HSFApiProviderBean hsfApiProviderBean = new HSFApiProviderBean(); //... hsfApiProviderBean.setCorePoolSize("50"); hsfApiProviderBean.setMaxPoolSize("200");
    • Spring配置HSF應(yīng)用:
    <bean class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init"> <!--[設(shè)置] 發(fā)布服務(wù)的接口--> <property name="serviceInterface" value="com.alibaba.middleware.hsf.guide.api.service.OrderService"/> <property name="corePoolSize" value="50" /> <property name="maxPoolSize" value="200" /> </bean>

    Pandora Boot開發(fā)流程

    開發(fā)流程節(jié)點:

  • 服務(wù)接口:Pandora Boot 的服務(wù)基于接口實現(xiàn),接口需在服務(wù)設(shè)計時預(yù)先定義設(shè)計好,生產(chǎn)者將實現(xiàn)該接口以提供具體的實現(xiàn)來提供服務(wù),消費者也是基于此接口作為服務(wù)去訂閱。
  • 服務(wù)生產(chǎn)者:生產(chǎn)者將實現(xiàn)之前定義的服務(wù)接口以提供具體實現(xiàn),除了代碼實現(xiàn)的工作之外,所以還需要再定義服務(wù)發(fā)布的注解@HSFProvider配置標識為服務(wù)提供者。
  • 服務(wù)消費者:消費者基于接口使用服務(wù),具體調(diào)用時需要做兩個步驟:
  • Spring 的配置文件使用標簽定義好一個Bean。
  • 在使用的時候從Spring的context中將Bean取出。
  • 開發(fā)Pandora Boot應(yīng)用

    構(gòu)建Pandora Boot maven工程

  • 構(gòu)建maven工程,創(chuàng)建完maven工程后,在pom.xml文件中配置EDAS的私服庫地址和插件私服庫地址。
  • <repositories> <repository> <id>central</id> <url>http://repo1.maven.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>edas-oss-central</id> <name>taobao mirror central</name> <url>http://edas-public.oss-example.aliyuncs.com/repository</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://repo1.maven.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>edas-oss-plugin-central</id> <url>http://edas-public.oss-example.aliyuncs.com/repository</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </pluginRepository> </pluginRepositories>
  • 構(gòu)建maven工程,創(chuàng)建完maven工程后,在pom.xml文件中定義添加pandora boot和spring boot依賴的版本。
  • <properties> <spring-boot.version>2.1.6.RELEASE</spring-boot.version> <pandora-boot.version>2019-06-stable</pandora-boot.version> </properties> <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>com.taobao.pandora</groupId> <artifactId>pandora-boot-starter-bom</artifactId> <version>${pandora-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencyManagement>
  • 在pom.xml添加pandora boot 和spring boot開發(fā)的依賴。
  • <dependencies> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>pandora-hsf-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </dependency> <dependency> <groupId>com.taobao.pandora</groupId> <artifactId>pandora-boot-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- Use Swagger UI for REST API test --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> </dependencies>
  • 在pom.xml文件中添加pandora boot應(yīng)用的maven打包插件。
  • <build> <plugins> <plugin> <groupId>com.taobao.pandora</groupId> <artifactId>pandora-boot-maven-plugin</artifactId> <version>2.1.11.8</version> <executions> <execution> <phase>package</phase> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
  • 在工程目錄resources下的application.properties文件中配置應(yīng)用名和監(jiān)聽端口號。
  • spring.application.name=hsf-provider server.port=8082 spring.hsf.version=1.0.0 spring.hsf.timeout=1000
  • 添加服務(wù)啟動的main函數(shù)入口。
  • @SpringBootApplication public class HSFProviderApplication { public static void main(String[] args) { // 啟動 Pandora Boot 用于加載 Pandora 容器 PandoraBootstrap.run(args); SpringApplication.run(HSFProviderApplication.class, args); // 標記服務(wù)啟動完成,并設(shè)置線程 wait。防止用戶業(yè)務(wù)代碼運行完畢退出后,導(dǎo)致容器退出。 PandoraBootstrap.markStartupAndWait(); } }

    編寫Pandora Boot服務(wù)提供者

  • 對于服務(wù)提供者,其創(chuàng)建過程與以上構(gòu)建Pandora Boot maven工程步驟一致外,需要定義服務(wù)接口EchoService提供給消費者訂閱。
  • public interface EchoService { String echo(String string); String echoFuture(String str); String echoCallback(String str); String echoHSFMix(int id); String echoMQConsumer(String str); }
  • 創(chuàng)建服務(wù)提供者的具體實現(xiàn)類EchoServiceImpl,并通過注解方式發(fā)布服務(wù)。
  • @HSFProvider(serviceInterface = EchoService.class, serviceGroup = "HSF", serviceVersion = "1.0.0") public class EchoServiceImpl implements EchoService { @Autowired private EchoDao echoDao; @Autowired private SimpleMQConsumer simpleMQConsumer; @Autowired private SimpleMQProduce simpleMQProduce; public String echo(String str) { return "hello --" + str; } public String echoFuture(String str) { return "welcome --" + str; } public String echoCallback(String str) { return "welcome --" + str; } public String echoHSFMix(int id) { //寫消息 simpleMQProduce.sendMsg(id+""); return echoDao.findById(id).getUserName(); } public String echoMQConsumer(String str) { //訂閱消息 simpleMQConsumer.receive(); return str; } }

    編寫Pandora Boot消費者服務(wù)

  • 對于服務(wù)消費者,其創(chuàng)建過程與以上構(gòu)建Pandora Boot maven工程步驟一致,添加服務(wù)提供者定義的接口復(fù)制到消費者服務(wù)工程。
  • public interface EchoService { String echo(String string); String echoFuture(String str); String echoCallback(String str); String echoHSFMix(int id); String echoMQConsumer(String str); }
  • 添加消費者服務(wù)配置類及業(yè)務(wù)邏輯代碼。
  • 消費者服務(wù)配置類: @Configuration public class HsfConfig { //通過注解的方式將服務(wù)消費者的實例注入到Spring的Context中,同步調(diào)用 @HSFConsumer(clientTimeout = 3000, serviceVersion = "1.0.0") private EchoService echoService; } 消費者服務(wù)實現(xiàn)調(diào)用HSF服務(wù)提供者: @RestController @RequestMapping(value = "/poc") @Api(description = "HSF-POC功能測試接口") public class ConsumerController { @Autowired private EchoService echoService; @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true) private String useLocalCache; @ApiOperation(value = "獲取服務(wù)者返回信息 A->C") @RequestMapping(value = "/hsf-echo", method = RequestMethod.GET) public String echo(@RequestParam("str") String str) { return echoService.echo(str) + "\r\n"; } @ApiOperation(value = "通過ID查詢數(shù)據(jù)庫獲取返回信息、RocketMQ寫信息 A->C") @RequestMapping(value = "/hsf-echo-mix", method = RequestMethod.GET) public String echoHSFMix(@RequestParam("id") int id) { return echoService.echoHSFMix(id) + "\r\n"; } @ApiOperation(value = "RocketMQ訂閱消息 A->C") @RequestMapping(value = "/hsf-echo-mq", method = RequestMethod.GET) public String echoMQConsumer(@RequestParam("str") String str) { return echoService.echoMQConsumer(str) + "\r\n"; } @ApiOperation(value = "獲取版本信息") @RequestMapping(value = "/echo-version", method = RequestMethod.GET) public String echoVersion() { return "This is pandora boot version 2" + "\r\n"; } }

    開發(fā)Pandora Boot異步調(diào)用

    對于客戶端來說,并不是所有的HSF服務(wù)都是需要同步等待服務(wù)端返回結(jié)果的,對于這些場景,HSF提供異步調(diào)用的方式,讓客戶端不必同步阻塞在HSF操作上。在HSF服務(wù)發(fā)起異步調(diào)用,調(diào)用結(jié)果都是返回的默認值。而真正的結(jié)果要在HSFResponseFuture或者回調(diào)函數(shù)callback中獲取。

    Futrue異步調(diào)用

  • 對于服務(wù)提供者,其創(chuàng)建過程與以上構(gòu)建Pandora Boot maven工程步驟一致外,需要定義服務(wù)接口EchoService提供給消費者訂閱,在EchoService添加Future異步調(diào)用的接口及實現(xiàn)類。
  • public interface EchoService { String echoFuture(String str); } 接口實現(xiàn)類: @HSFProvider(serviceInterface = EchoService.class, serviceGroup = "HSF", serviceVersion = "1.0.0") public class EchoServiceImpl implements EchoService { public String echoFuture(String str) { return "welcome --" + str; } }
  • 對于服務(wù)消費者,其創(chuàng)建過程與以上構(gòu)建Pandora Boot maven工程步驟一致外,編寫Future異步調(diào)用代碼。
  • 在配置類通過注解配置HSF接口方法為異步調(diào)用: //Future異步調(diào)用 @HSFConsumer(serviceGroup = "HSF", serviceVersion = "1.0.0", futureMethods = "echoFuture") private EchoService echoService; 編寫對外暴露請求的Future異步調(diào)用代碼: @RequestMapping(value = "/hsf-echo-future", method = RequestMethod.GET) public String echoFuture(@RequestParam("str") String str) { String resp = echoService.echoFuture(str) + "\r\n"; System.out.println(resp); //及時在當(dāng)前調(diào)用上下文中,獲取 future 對象;因為該對象是放在ThreadLocal中,同一線程中后續(xù)調(diào)用會覆蓋future對象,所以要及時取出。 HSFFuture hsfFuture = HSFResponseFuture.getFuture(); //這里才真正地獲取結(jié)果,如果調(diào)用還未完成,將阻塞等待結(jié)果,5000ms是等待結(jié)果的最大時間 try { System.out.println(hsfFuture.getResponse(5000)); } catch (Throwable throwable) { throwable.printStackTrace(); } return resp; }

    Callback異步調(diào)用

  • 對于服務(wù)提供者,其創(chuàng)建過程與以上構(gòu)建Pandora Boot maven一致外,需要定義服務(wù)接口EchoService提供給消費者訂閱,在EchoService添加Callback異步調(diào)用的接口及實現(xiàn)類。
  • public interface EchoService { String echoFuture(String str); } 接口實現(xiàn)類: @HSFProvider(serviceInterface = EchoService.class, serviceGroup = "HSF", serviceVersion = "1.0.0") public class EchoServiceImpl implements EchoService { public String echoFuture(String str) { return "welcome --" + str; } }
  • 對于服務(wù)消費者,其創(chuàng)建過程與以上構(gòu)建Pandora Boot maven步驟一致外,編寫Future異步調(diào)用代碼。
  • 注解配置HSF接口方法為callback調(diào)用: @AsyncOn(interfaceName = EchoService.class, methodName = "echoCallback") public class CallbackHandler implements HSFResponseCallback { public void onAppException(Throwable t) { t.printStackTrace(); } public void onAppResponse(Object result) { //取 callback 調(diào)用時設(shè)置的上下文 Object context = CallbackInvocationContext.getContext(); System.out.println(result.toString()); System.out.println(context); } public void onHSFException(HSFException e) { e.printStackTrace(); } } 編寫對外暴露請求的Callback異步調(diào)用代碼: @RequestMapping(value = "/hsf-echo-callback", method = RequestMethod.GET) public String echoCallback(@RequestParam("str") String str) { String resp = echoService.echoCallback(str) + "\r\n"; System.out.println(resp); return resp; }

    開發(fā)Pandora Boot超時設(shè)置

    背景信息

    注解配置HSF服務(wù),SpringBoot廣泛使用的今天,使用注解裝配SpringBean也成為一種選擇,HSF也支持使用注解進行配置,用來訂閱服務(wù)。

    客戶端注解超時配置

  • 首先在Maven項目pom.xml文件中添加依賴Starter:
  • <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>pandora-hsf-spring-boot-starter</artifactId> </dependency>
  • 通常一個HSF Consumer需要在多個地方使用,但并不需要在每次使用的地方都用@HSFConsumer來標記。只需要寫一個統(tǒng)一個Config類,然后在其它需要使用的地方,直接@Autowired注入即可上述例子中的API配置等同于如下注解配置:
  • @HSFConsumer(clientTimeout = 1000, methodSpecials = @HSFConsumer.ConsumerMethodSpecial(methodName = "queryOrder", clientTimeout = "100")) private OderService orderService;

    服務(wù)端注解超時配置

  • 首先在Maven項目pom.xml文件中添加依賴Starter:
  • <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>pandora-hsf-spring-boot-starter</artifactId> </dependency>
  • 服務(wù)端注解配置HSF服務(wù)超時設(shè)置:
  • @HSFProvider(serviceInterface = OrderService.class, clientTimeout = 3000) public class OrderServiceImpl implements OrderService { @Autowired private OrderDAO orderDAO; @Override public OrderModel queryOrder(Long id) { return orderDAO.queryOrder(id); } }

    開發(fā)Pandora Boot服務(wù)線程池配置

    背景信息

    注解配置HSF服務(wù),SpringBoot被廣泛使用的今天,使用注解裝配SpringBean也成為一種選擇,HSF也支持使用注解進行配置,用來訂閱服務(wù)。

  • 首先在Maven項目pom.xml文件中添加依賴Starter。
  • <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>pandora-hsf-spring-boot-starter</artifactId> </dependency>
  • 將@HSFProvider配置到實現(xiàn)的類型上,上述例子中的API配置等同于如下注解配置。
  • @HSFProvider(serviceInterface = OrderService.class, corePoolSize = 50, maxPoolSize = 200) public class OrderServiceImpl implements OrderService { @Autowired private OrderDAO orderDAO; @Override public OrderModel queryOrder(Long id) { return orderDAO.queryOrder(id); } }



    我們是阿里云智能全球技術(shù)服務(wù)-SRE團隊,我們致力成為一個以技術(shù)為基礎(chǔ)、面向服務(wù)、保障業(yè)務(wù)系統(tǒng)高可用的工程師團隊;提供專業(yè)、體系化的SRE服務(wù),幫助廣大客戶更好地使用云、基于云構(gòu)建更加穩(wěn)定可靠的業(yè)務(wù)系統(tǒng),提升業(yè)務(wù)穩(wěn)定性。我們期望能夠分享更多幫助企業(yè)客戶上云、用好云,讓客戶云上業(yè)務(wù)運行更加穩(wěn)定可靠的技術(shù),您可用釘釘掃描下方二維碼,加入阿里云SRE技術(shù)學(xué)院釘釘圈子,和更多云上人交流關(guān)于云平臺的那些事。

    原文鏈接:https://developer.aliyun.com/article/784841?

    版權(quán)聲明:本文內(nèi)容由阿里云實名注冊用戶自發(fā)貢獻,版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識產(chǎn)權(quán)保護指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進行舉報,一經(jīng)查實,本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。

    總結(jié)

    以上是生活随笔為你收集整理的专有云传统HSF升级Pandora Boot开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    欧美日韩一区三区 | 欧美日韩一区二区免费在线观看 | 久久久福利视频 | 久久免费99精品久久久久久 | 国产视频精选 | 91麻豆精品国产自产 | 国产黄在线播放 | 中文在线亚洲 | 97av在线视频 | 日韩欧美视频一区二区三区 | 国产精品色在线 | 一区二区三区在线免费 | 久久久久久久亚洲精品 | www色com| 亚洲精品2区 | www.天天成人国产电影 | 一区中文字幕电影 | 一区二区三区在线免费播放 | 1000部18岁以下禁看视频 | 欧美 亚洲 另类 激情 另类 | 国产伦精品一区二区三区四区视频 | 精品黄色视| 国产美女网 | 日韩r级电影在线观看 | 国产在线超碰 | 日韩欧美观看 | 天天色图| 国产黄免费在线观看 | 久久国内免费视频 | 国产精品久久久久久久久久久久冷 | 久草在线精品观看 | 91精品推荐 | 97国产在线观看 | 国产精品一区二区三区电影 | 婷婷色网 | www.午夜 | 中文字幕国产精品一区二区 | 99九九视频 | 91精品久久久久久综合乱菊 | 午夜色场| 国产亚洲在 | 成人久久免费视频 | 国产96视频| 丁香六月婷 | 久久久 精品| 国产在线观看二区 | 2019中文字幕网站 | av国产在线观看 | 国产精品久久久久久一二三四五 | www亚洲一区 | 日日夜夜天天久久 | 人人射av| 这里只有精品视频在线观看 | 日韩免费 | 国产拍在线 | 亚洲aⅴ在线观看 | 亚州精品天堂中文字幕 | 最近日韩免费视频 | 日韩视频精品在线 | 欧美一级片| 婷五月激情 | 福利视频网址 | 日韩在线视频二区 | 免费看色网站 | 888av| 久久tv视频 | 日韩免费播放 | 久久精品站 | 中文字幕视频三区 | 欧美日韩在线观看不卡 | 久久经典国产视频 | 黄视频色网站 | 日批网站免费观看 | 国产一级高清 | 国产精品久久久久久久婷婷 | 国产欧美日韩精品一区二区免费 | 色婷婷综合激情 | 国产成人精品免高潮在线观看 | 8x成人免费视频 | 中文字幕文字幕一区二区 | 91色网址| 97热久久免费频精品99 | 亚洲国产三级在线 | 91成人精品国产刺激国语对白 | 亚洲精品999 | 中文字幕资源网在线观看 | 黄色小说视频网站 | 久久男人免费视频 | 日韩视频在线观看免费 | 亚洲美女在线国产 | 韩国av免费看 | 黄色片毛片 | 日日干网 | 亚洲资源在线网 | 亚洲手机天堂 | 在线成人一区二区 | 在线a人片免费观看视频 | 在线观看网站黄 | 天天在线免费视频 | 中文字幕精品一区久久久久 | 国产伦精品一区二区三区高清 | 91av手机在线观看 | 婷婷亚洲五月 | 久久99精品久久久久久秒播蜜臀 | 久久久久久久久久久久久国产精品 | 久草在线欧美 | 国产麻豆传媒 | 在线你懂的视频 | 欧美精品三级 | 91麻豆精品久久久久久 | 特黄免费av | 日本成址在线观看 | 91成年人在线观看 | 久久精品一区二 | 日韩色中色 | 国产在线va | 在线视频手机国产 | 久久永久免费 | 黄色字幕网 | 色综合中文字幕 | 国产成人av | 国内精品久久久久久久久久久久 | 国产区免费在线 | 激情五月婷婷网 | av中文字幕av | 亚洲国产999 | 欧美a√大片 | 黄色特级片 | av黄网站 | 亚洲在线激情 | a天堂最新版中文在线地址 久久99久久精品国产 | 91在线看黄 | 91精品啪在线观看国产 | 婷婷久久综合九色综合 | 亚洲成人999 | 毛片永久免费 | 国产精品正在播放 | 一级特黄aaa大片在线观看 | 国产五月天婷婷 | 欧美精品久久久久久久久久丰满 | 国产福利a | 成年人免费看的视频 | 国产中文字幕在线播放 | 久久人人爽人人片av | 久久久久久国产精品 | 久久香蕉电影 | 天干啦夜天干天干在线线 | 欧美 日韩精品 | 国产一区在线视频观看 | 九九免费观看全部免费视频 | 亚洲国产日韩一区 | 国产精品去看片 | av日韩不卡 | 久久精品欧美一区二区三区麻豆 | 黄色在线成人 | 91精品免费 | 一本一道波多野毛片中文在线 | 久久国产热视频 | 免费福利在线视频 | 亚洲欧美怡红院 | 日韩欧美xxxx| 在线观看电影av | 日韩理论视频 | 六月丁香婷婷久久 | av大全在线免费观看 | 中文字幕av免费在线观看 | 国产福利小视频在线 | 婷婷av网站 | 国产高清视频色在线www | 婷婷丁香激情 | 日韩高清网站 | 亚洲一级二级 | 草久久影院 | 狠狠色丁香婷婷综合久久片 | 国产免费专区 | 欧美aa级 | 久久人人爽人人人人片 | 成人免费91 | 亚洲国产成人av网 | 视频一区久久 | 久久久久久综合网天天 | 99久久精品无免国产免费 | 免费高清在线观看电视网站 | 日韩欧美综合 | 婷婷午夜 | 国产亚洲视频在线观看 | 天天综合网天天综合色 | 精品99免费 | 开心激情婷婷 | 色综合网 | 国产97在线播放 | 欧美一区二区免费在线观看 | 国产精品一区一区三区 | 国产a国产a国产a | 欧美有色 | 国精产品永久999 | 免费在线观看中文字幕 | 欧美日韩国产精品一区二区 | 久久亚洲精品国产亚洲老地址 | 久久人人爽视频 | 欧美激情综合五月色丁香 | 青草视频在线 | av在线影片| 久久人人爽人人片 | 色综合久久天天 | 黄色国产在线观看 | 少妇bbbb搡bbbb搡bbbb | 天天干天天干天天干 | 2022国产精品视频 | 欧美美女一级片 | 最新av免费| 久久99久久99免费视频 | 日韩电影中文字幕在线 | 国产精品亚洲精品 | 九九热国产 | 亚洲黄a| 在线免费观看麻豆 | 九九一级片 | 在线观看视频你懂 | 亚州国产精品视频 | 日韩在线视频免费看 | 福利视频午夜 | 麻豆综合网 | 婷婷久久网 | 国产丝袜在线 | 国产99久久久久久免费看 | 国产精品久久久久久爽爽爽 | 不卡视频一区二区三区 | 九九色在线 | 成人免费在线播放视频 | 婷婷久久一区二区三区 | 播五月综合| se视频网址 | 最近中文字幕免费av | 日日夜夜操操操操 | 久久精品美女视频网站 | 国产一级淫片在线观看 | 成年人视频在线免费播放 | 久久综合九色综合欧美狠狠 | 在线黄色毛片 | 日韩在线播放av | 97视频播放 | 亚洲日本黄色 | 青青网视频 | 日韩免费在线视频 | 99精品国产一区二区三区麻豆 | 日日操夜 | 久久99热国产 | 在线免费高清一区二区三区 | 国产免费一区二区三区网站免费 | 亚洲国产小视频在线观看 | 99色免费| 国产香蕉视频在线观看 | 夜夜视频欧洲 | 91片黄在线观看 | 亚洲精品国产品国语在线 | 午夜精品久久久久久久99婷婷 | 国内成人精品视频 | 在线免费观看视频你懂的 | 91精品久| 日韩欧美网址 | 午夜国产影院 | 中文亚洲欧美日韩 | 国产无遮挡又黄又爽馒头漫画 | 91桃色在线免费观看 | 在线观看资源 | 久久综合日 | 久久免视频| 91精品国产成人观看 | 久久高清视频免费 | 99中文字幕在线观看 | 久久久美女 | 亚洲伊人婷婷 | 国产精品久久久电影 | 色婷婷亚洲婷婷 | 国产精彩视频一区 | 久久免费看片 | 最新日本中文字幕 | 久久99精品久久只有精品 | 久久看片网 | 国模一二三区 | 人人干网 | 又色又爽又黄 | 四虎在线免费观看 | 91免费高清在线观看 | 亚洲欧美综合精品久久成人 | 日韩影片在线观看 | 久久精品视频在线免费观看 | 在线看中文字幕 | 香蕉视频在线免费看 | 日韩美在线| 天天搞天天| 日日操日日 | 日日干天天操 | 日韩欧美综合在线视频 | 免费观看一级特黄欧美大片 | 18pao国产成视频永久免费 | 日韩欧美99 | 国产精彩视频一区 | 日韩午夜高清 | 国产午夜亚洲精品 | 在线视频 国产 日韩 | 99r在线视频 | 91色综合 | 91成品人影院| wwwwwww黄 | 久久久精品免费看 | 四虎国产精品成人免费4hu | 欧美日韩久 | 成人午夜在线观看 | 午夜精品久久久久久久99婷婷 | av在线播放免费 | 国产成人免费观看 | 狠狠色丁香久久婷婷综合丁香 | 亚洲国产三级在线 | 久久在线精品视频 | 国产一级二级三级在线观看 | 国产成人福利 | 综合网天天色 | 伊人网av | av在线看网站 | 国产亚洲观看 | 成年人在线观看免费视频 | 最新av网址在线观看 | 亚洲丝袜一区 | 日本久久精品视频 | 二区三区在线 | www.亚洲视频 | ww亚洲ww亚在线观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产在线播放一区二区 | www久久九| 色 免费观看 | 久久久精品一区二区 | 久久艹中文字幕 | 99热在线这里只有精品 | 日韩网站在线播放 | 一级理论片在线观看 | 免费视频三区 | 三级黄色免费 | 五月婷婷中文字幕 | 手机成人av在线 | 久久久综合九色合综国产精品 | 超级碰视频 | 日本中文字幕在线 | av7777777 | 国产成人免费观看 | 色婷婷88av视频一二三区 | 欧洲av在线| 在线免费观看羞羞视频 | 黄色av一区 | 麻豆视频一区 | 久久伊人热 | 成人免费网站视频 | 四虎最新域名 | av电影亚洲 | 成人av亚洲| 成人性生交大片免费观看网站 | 黄色三级视频片 | 国产精品破处视频 | 精品国产一区二区三区久久久 | 国产精品原创av片国产免费 | 色wwwww| 一本色道久久综合亚洲二区三区 | 人人爽人人看 | 国产在线91精品 | 麻豆视频免费播放 | 99久久久国产精品 | 在线观看精品 | 91av在线看| 国产精品成 | 97色在线观看 | 一区二区三区动漫 | 中文字幕一区二区三区视频 | 成人免费在线播放视频 | 一级片视频在线 | 91x色| 日韩网站在线播放 | 欧美另类色图 | 成人毛片久久 | 探花国产在线 | 国产剧情一区二区 | 精品免费久久 | 国产中文伊人 | 麻豆激情电影 | 日韩v在线 | 久久久久久久久久久久久久免费看 | 九九交易行官网 | 99国产情侣在线播放 | 亚洲一片黄 | 久久成人午夜视频 | 成人h动漫在线看 | 午夜在线观看 | 在线观看免费视频你懂的 | 成人久久18免费网站麻豆 | 亚洲女同videos | 亚洲电影av在线 | 日韩欧美视频在线免费观看 | 一级一片免费看 | 在线观看日本高清mv视频 | 欧美不卡在线 | 欧美一级片在线 | 日韩欧美高清视频在线观看 | 日本性xxxxx 亚洲精品午夜久久久 | 国产在线日韩 | 天天色天 | 久久亚洲热 | 五月综合激情婷婷 | 97在线视频免费观看 | 久久精品网址 | 日韩在线激情 | 中文字幕精品一区久久久久 | 国产精品久久久久久欧美 | 天天干天天干天天色 | 特片网久久 | 国产无套精品久久久久久 | 91香蕉嫩草 | av中文在线 | 一二三精品视频 | 久久国产精品免费观看 | 久久精视频 | 人人添人人澡人人澡人人人爽 | 91亚洲激情 | 97电影院在线观看 | 久久毛片高清国产 | 色丁香色婷婷 | 四虎在线观看网址 | av三区在线 | 色婷婷久久久 | 99精品国产兔费观看久久99 | 日韩av成人在线观看 | 波多野结衣综合网 | 色综合久 | 亚洲视频综合在线 | 免费视频一二三区 | 在线观看日韩精品视频 | 欧美黑人性爽 | 在线视频日韩精品 | av黄色影院 | 91九色免费视频 | 亚洲精品视频大全 | 亚洲成av人片在线观看www | 国内综合精品午夜久久资源 | 亚洲毛片久久 | 久久人人爽 | 蜜臀久久99静品久久久久久 | 菠萝菠萝蜜在线播放 | 久一网站 | 日韩久久久久久久久久 | 在线免费黄色毛片 | 亚洲日本黄色 | 成人黄色小说网 | 日韩欧美黄色网址 | 手机av片 | 亚洲乱码国产乱码精品天美传媒 | a色视频 | 日韩在线免费视频 | 91成人在线网站 | 精品理论片 | 国产精品自拍在线 | 日韩激情精品 | 国产美女免费看 | 五月天激情视频在线观看 | 日韩欧美视频免费看 | 久草99 | 国产精品1区2区在线观看 | 麻豆影音先锋 | 五月激情婷婷丁香 | 国产亚洲精品久久久久动 | 久草视频看看 | 99精品在线播放 | 9幺看片 | 久久av中文字幕片 | 激情丁香 | 天天翘av| 国产视频在 | 在线免费中文字幕 | 在线免费高清视频 | 久久综合狠狠 | 天天干夜夜夜操天 | 亚洲精品自在在线观看 | 日本久久久久久久久久久 | 亚洲做受高潮欧美裸体 | 亚洲国产久 | 色欧美视频 | 最新国产视频 | 中文字幕在线看视频 | 久久视影| 久久久精品一区二区三区 | 五月天综合色激情 | 日韩高清免费电影 | 国产精品二区三区 | 色欲综合视频天天天 | 日韩视频在线不卡 | 精品国产aⅴ麻豆 | 深爱激情婷婷网 | 欧美污污网站 | 日韩专区在线观看 | 不卡的av在线 | 激情视频免费在线观看 | 亚洲一区欧美激情 | 人人爽人人爽人人片av | 天天操综合网站 | 又黄又爽又刺激的视频 | 波多野结衣资源 | 国产精品久久久久影院日本 | 日韩在线视频免费播放 | 久久都是精品 | 国产91影视 | 一区二区三区中文字幕在线观看 | 六月激情网| 欧美日韩在线观看不卡 | 97碰碰碰| 在线激情小视频 | 国内精品美女在线观看 | 一区二区网 | 亚洲影视九九影院在线观看 | 久久久久久久国产精品影院 | 国产成人精品不卡 | 国产精品资源网 | 91在线免费观看国产 | 色成人亚洲网 | 日韩精品一区在线播放 | 国产亚洲欧美精品久久久久久 | 久久99亚洲精品久久久久 | av大全在线免费观看 | 亚洲高清不卡av | 波多野结衣小视频 | 成人影音av| 欧美在线一级片 | 天天色宗合 | 国产在线不卡视频 | 欧美久久综合 | 亚洲一级二级 | 波多野结衣在线观看一区二区三区 | 99精品色 | 亚洲欧洲视频 | 最新av在线播放 | 国产精品久久在线 | 人人澡超碰碰97碰碰碰软件 | 99av在线视频 | 亚洲精品国产区 | 91精品视频在线免费观看 | 国产精品一区二区在线看 | 很黄很污的视频网站 | 色婷婷啪啪免费在线电影观看 | 黄色免费大全 | 久久国产精品99久久久久久老狼 | 欧美日韩国产伦理 | 一区二区三区四区精品 | 久操97| 午夜精品一区二区三区在线播放 | 国产91精品一区二区麻豆网站 | 国产成人在线网站 | 亚洲天堂视频在线 | 色婷婷综合久久久久中文字幕1 | 免费看片网站91 | 免费福利片 | 亚洲精品国偷拍自产在线观看蜜桃 | 日韩中文字幕亚洲一区二区va在线 | 国内成人精品2018免费看 | 久久久久久久久久久影视 | 激情久久一区二区三区 | 超碰av在线播放 | 一级国产视频 | 久久免费电影网 | 成年人免费看片 | 在线免费91 | av大片免费| 婷婷激情五月综合 | 亚洲精品乱码久久久久久久久久 | 国产精品久久久久婷婷二区次 | 黄色小说18 | 美女在线黄 | 国产精品久久在线 | 99电影 | 日韩 国产 | 日韩欧美电影在线观看 | 婷婷精品国产一区二区三区日韩 | 国产精品国产亚洲精品看不卡 | 国产伦精品一区二区三区在线 | 国产精品久久久久一区二区三区 | 欧美日韩视频在线观看免费 | 亚洲经典中文字幕 | 一区二区精品久久 | 91亚洲国产| 日韩在线观看影院 | 国产精品涩涩屋www在线观看 | 国产亚洲婷婷免费 | 日韩乱理 | 亚洲一级黄色 | 2024av | av成人免费在线 | 日韩在线色视频 | 亚洲成av人片 | 欧美日韩国产精品一区二区 | 欧美日韩高清一区二区 | 成人永久视频 | 欧美激情综合五月色丁香 | 国产成人精品亚洲a | 中文字幕在线中文 | 成人va在线观看 | 精品国产99 | 国产中文字幕在线免费观看 | 999成人精品 | 在线观看理论 | 国产99久久99热这里精品5 | 四虎国产免费 | 波多在线视频 | 国产喷水在线 | www91在线观看 | 最新午夜电影 | 国产精品一区二区吃奶在线观看 | 国产小视频你懂的在线 | 国产在线看一区 | 香蕉视频国产在线 | 麻豆传媒视频在线免费观看 | 国产一区二区三区高清播放 | 五月婷婷开心中文字幕 | 国产99久久99热这里精品5 | 免费看的黄色 | 欧美激情精品久久久久 | 国产午夜精品av一区二区 | 精品资源在线 | 国产精品igao视频网入口 | 美女国内精品自产拍在线播放 | 欧美极品在线播放 | 天天射射天天 | 亚洲色视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 久久国产精品视频免费看 | 天天干天天干天天操 | 亚洲经典精品 | 四虎国产视频 | 天天色棕合合合合合合 | 欧美最猛性xxxxx免费 | 久草在线免费看视频 | 国产xx视频| 中文在线√天堂 | 亚洲精品国产精品国产 | 夜夜夜夜爽 | av免费在线看网站 | 99九九热只有国产精品 | 91亚洲精品久久久久图片蜜桃 | 日韩久久激情 | 久草视频在线观 | 亚洲涩涩涩涩涩涩 | 精品国产久| 国产精品久久久久一区二区三区共 | 1000部18岁以下禁看视频 | 在线精品在线 | 青青河边草免费观看 | 欧美特一级片 | 亚洲va欧美va人人爽春色影视 | av福利第一导航 | 亚洲精品国产第一综合99久久 | 最近中文字幕高清字幕在线视频 | 青青河边草手机免费 | 在线精品一区二区 | 日韩在线| 欧美一级免费片 | 成人一级视频在线观看 | 免费精品久久久 | 九色精品免费永久在线 | 日韩中文字幕亚洲一区二区va在线 | 日韩欧美91 | 国产精品免费在线视频 | 日韩免费视频观看 | 久久国产手机看片 | 在线播放亚洲 | 韩国一区二区三区视频 | 日本黄区免费视频观看 | 探花视频免费在线观看 | 中文字幕欧美激情 | 国产成人精品在线观看 | 激情网五月婷婷 | 久久无码av一区二区三区电影网 | 亚洲国内在线 | 中文字幕在线播放av | 黄色大片日本免费大片 | 99热这里是精品 | 日韩av在线免费看 | 日日爽视频 | 日韩视频免费 | 搡bbbb搡bbb视频 | 亚洲不卡123| 在线免费视频你懂的 | 99久久久国产精品免费观看 | 视频一区亚洲 | 国产精品一区专区欧美日韩 | 久久99热这里只有精品 | 日韩网站免费观看 | 99视频国产在线 | av福利在线看 | 久久免费99精品久久久久久 | 亚洲欧美成人网 | 国产在线视频资源 | 亚洲免费资源 | 亚洲综合色视频 | 亚洲国产精品传媒在线观看 | 99超碰在线播放 | 看片在线亚洲 | 狠狠色丁香 | 日日干天天操 | 在线免费看黄网站 | 男女视频91 | 在线免费观看视频一区 | 九九热99视频 | 在线免费观看视频 | 久久久www成人免费精品 | 久久理伦片| 在线91色 | 国产经典 欧美精品 | 亚州精品一二三区 | 日韩专区中文字幕 | 中文字幕乱偷在线 | 99午夜| 99婷婷| 在线观看一级 | 久久短视频 | 国产精品久久久久久久久久久不卡 | 色婷婷国产精品 | 蜜臀av性久久久久av蜜臀妖精 | 日韩久久精品 | 国产xx视频 | 国产伦精品一区二区三区照片91 | 国产在线看一区 | 日韩av在线资源 | 美女视频a美女大全免费下载蜜臀 | 亚洲欧美日韩一区二区三区在线观看 | 免费av试看 | 中文在线亚洲 | 婷婷丁香六月天 | 欧美精选一区二区三区 | 丝袜足交在线 | 日韩三级视频在线观看 | 99久久夜色精品国产亚洲96 | 伊人久久影视 | 日韩高清免费无专码区 | 97超碰在线资源 | 欧美一区二区三区不卡 | 456成人精品影院 | 成人国产精品免费观看 | 亚洲一区免费在线 | 久久久国产成人 | 四虎影视成人永久免费观看视频 | 亚洲一区 av| 国产精品网址在线观看 | 成人亚洲网| 色综合久久久久网 | 日韩激情网 | 久久久 精品 | 91一区啪爱嗯打偷拍欧美 | 97在线看 | 911久久| 久久久久久久久毛片精品 | 涩涩网站在线 | 久久九九视频 | 久久99精品久久久久久清纯直播 | 精品国产乱码久久久久久三级人 | 91在线视频精品 | 久草网首页 | 在线看成人| av先锋中文字幕 | 中文字幕久久久精品 | 欧美日本一二三 | 在线观看网站你懂的 | 国产精品九九九九九 | 最近免费中文字幕mv在线视频3 | av免费在线免费观看 | 在线观看黄色小视频 | 国产精品99免费看 | 欧美日韩一区二区三区视频 | 国产小视频免费在线网址 | 欧美a级在线免费观看 | 亚洲全部视频 | 色综合久久88 | 日韩理论影院 | 伊人资源站 | 亚洲综合色视频在线观看 | 麻豆小视频在线观看 | 日韩免费在线视频观看 | 久久成人人人人精品欧 | 精品久久美女 | 91免费版在线观看 | a视频免费在线观看 | 久久婷婷一区二区三区 | 玖玖在线观看视频 | 国产小视频你懂的 | 精品国产一区二区在线 | 中文字幕黄色 | 视频精品一区二区三区 | 欧美在线视频第一页 | 久久区二区 | 亚洲无人区小视频 | 午夜精品视频一区二区三区在线看 | 婷婷福利影院 | 欧美一区二区三区免费观看 | 免费看的黄色小视频 | 久操视频在线观看 | 亚洲精品视频一 | 丁香在线视频 | 日韩欧美视频免费在线观看 | 久久成人国产 | 日韩在观看线 | 成人黄大片视频在线观看 | 成年人视频在线免费播放 | www色com| 国产高清不卡一区二区三区 | 亚洲精品一区二区精华 | 99精品视频免费全部在线 | 国产女人40精品一区毛片视频 | 午夜影院一级 | 麻豆系列在线观看 | 五月婷婷色播 | 亚洲一区二区三区精品在线观看 | 成人在线观看免费 | 色偷偷男人的天堂av | 亚洲欧美日韩国产一区二区 | 一区二区视频网站 | a久久免费视频 | 九九有精品 | 国产黄视频在线观看 | 久久夜夜操 | 狠狠色婷婷丁香六月 | 97成人在线视频 | 成人av影视在线 | 九九久久久 | 毛片美女网站 | 日韩欧美在线第一页 | 五月开心激情 | 欧美日韩高清在线一区 | 国产一区精品在线观看 | 麻豆精品传媒视频 | 91系列在线 | 四虎精品成人免费网站 | 超碰在线97国产 | 天天操天天射天天操 | 伊人日日干 | 精品99视频 | 亚洲视频久久久 | 欧美a视频在线观看 | 久久电影中文字幕视频 | 欧洲一区二区在线观看 | 91麻豆精品国产自产在线游戏 | 国产亚洲欧美在线视频 | 亚洲精品一区中文字幕乱码 | 99热精品视 | 欧美日韩二三区 | 综合网天天 | 99在线视频免费观看 | 国产精品一区二区电影 | 久久精品一区二区三区国产主播 | 成人资源在线播放 | 麻豆国产露脸在线观看 | 成人av教育 | 国产婷婷vvvv激情久 | 欧美午夜性生活 | 久久不射影院 | 高清av在线免费观看 | 麻豆传媒视频在线播放 | 亚洲精品99久久久久中文字幕 | 国产精品久久久久久久久久尿 | 天天干天天玩天天操 | 国产精品中文字幕在线观看 | 国产免费观看久久黄 | 天天弄天天干 | 久久99国产精品二区护士 | 国产精品一区二区三区在线看 | 久久午夜网 | 中文字幕在线观看国产 | 中文字幕av免费在线观看 | 精品国产欧美一区二区三区不卡 | 五月婷婷一级片 | 国产亲近乱来精品 | 亚洲午夜久久久综合37日本 | 一区二区三区精品在线视频 | 国产午夜精品久久久久久久久久 | 超碰免费97 | 美女国产免费 | 中文字幕免费观看 | 午夜18视频在线观看 | 免费成人av | 中文亚洲欧美日韩 | 91精品毛片 | av在线短片 | 久久久久久久久久网站 | av久久在线 | 波多野结衣视频一区二区 | 精品伦理一区二区三区 | 美女福利视频一区二区 | 日精品在线观看 | 狠狠狠狠狠色综合 | 免费观看国产视频 | 最新动作电影 | 2019久久精品 | 亚洲精品视频网 | 国产最新网站 | 国产精品你懂的在线观看 | 国产一区二区免费看 | 在线午夜电影神马影院 | 国产精品视频最多的网站 | 国产大片免费久久 | 色视频一区| 精品国产_亚洲人成在线 | 天天色草 | 日韩一区正在播放 | 国产色在线 | 看片的网址| 免费高清在线一区 | 91福利小视频 | 免费亚洲婷婷 | 日韩av片无码一区二区不卡电影 | 天天综合导航 | 伊人中文在线 | 人人射av| 欧美精品久久久久久久久久 | 日日摸日日碰 | 福利一区二区在线 | 黄网站色 | 69xx视频| 日韩av视屏 | av电影在线免费观看 | 国产99久久久国产精品免费二区 | 亚洲日本精品视频 | 一级黄色大片在线观看 | 日韩在线观看视频中文字幕 | 国产专区视频在线观看 | 国产精品一区二区美女视频免费看 | 操操操综合 | 中文字幕第一页在线 | 在线免费日韩 | 成年人网站免费在线观看 | 中字幕视频在线永久在线观看免费 | 成人动漫视频在线 | 97日日| 看国产黄色大片 | 91精品综合在线观看 | 国产精品久久久久久久毛片 | 天天在线操 | 国产一区二区三区免费观看视频 | av大片免费在线观看 | 激情婷婷亚洲 | 国产亚洲成人网 | 亚洲综合色播 | 综合久久婷婷 | 国产一区二区在线播放视频 | 国产成人av一区二区三区在线观看 | www.精选视频.com | 欧美成人h版 | 久久久久久久久免费视频 | 免费在线成人av电影 | 五月天视频网 | 国产精品久久久免费看 | 日韩在线三级 | 国产成人在线观看免费 | 国产精品精品国产婷婷这里av | 五月婷婷丁香在线观看 | 久久午夜电影院 | 亚洲va欧美va人人爽 | 色噜噜日韩精品一区二区三区视频 | 色香蕉网 | 男女视频91 | 精品国产乱码一区二 | 国产精品白虎 | 亚洲精品国产欧美在线观看 | 免费看黄在线看 | 色噜噜日韩精品一区二区三区视频 | 在线看成人av | 天天操天天操一操 | 97超碰免费在线 | 国产精久久久 | 国产精品av久久久久久无 | 国产福利一区在线观看 | 日韩在线视频二区 | 97影视| 在线视频一二区 | 麻豆传媒视频在线播放 | 久久九九精品久久 | 最新久久久 | 亚洲精品日韩在线观看 | 天天操人人要 | 波多野结衣视频一区二区 | 久久精品中文字幕一区二区三区 | 久久精品123 | 久草免费色站 | 亚洲三级视频 | 国产精品视频99 | 狠狠色丁香久久婷婷综 | 亚洲精品黄色在线观看 | 久久成人国产精品 | 国产成人精品亚洲精品 | 国产精品国产三级国产 | 精品91久久久久 | 夜夜视频欧洲 | 香蕉视频在线免费看 | 97福利在线 | 日本不卡久久 |