精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

OpenTelemetry agent 對 Spring Boot 應(yīng)用的影響:一次 SPI 失效的調(diào)查

開發(fā) 前端
在復(fù)現(xiàn)這個問題之前先簡單介紹下 java.net.spi.InetAddressResolverProvider 這個 SPI;它是在 JDK18 之后才提供的,在這之前我們使用 InetAddress 的內(nèi)置解析器來解析主機名和 IP 地址,但這個解析器之前是不可以自定義的。

背景

前段時間公司領(lǐng)導(dǎo)讓我排查一個關(guān)于在 JDK21 環(huán)境中使用 Spring Boot 配合一個 JDK18 新增的一個 SPI(java.net.spi.InetAddressResolverProvider) 不生效的問題。

但這個不生效的前置條件有點多:

  • JDK 的版本得在 18+
  • SpringBoot3.x
  • 還在額外再配合使用 -javaagent:opentelemetry-javaagent.jar 使用,也就是 OpenTelemetry 提供的 agent。

才會導(dǎo)致自定義的 InetAddressResolverProvider 無法正常工作。

在復(fù)現(xiàn)這個問題之前先簡單介紹下 java.net.spi.InetAddressResolverProvider 這個 SPI;它是在 JDK18 之后才提供的,在這之前我們使用 InetAddress 的內(nèi)置解析器來解析主機名和 IP 地址,但這個解析器之前是不可以自定義的。

在某些場景下會不太方便,比如我們需要請求 order.service 這個域名時希望可以請求到某一個具體 IP 地址上,我們可以自己配置 host ,或者使用服務(wù)發(fā)現(xiàn)機制來實現(xiàn)。

但現(xiàn)在通過 InetAddressResolverProvider 就可以定義在請求這個域名的時候返回一個我們預(yù)期的 IP 地址。

同時由于它是一個 SPI,所以我們只需要編寫一個第三方包,任何項目依賴它之后在發(fā)起網(wǎng)絡(luò)請求時都會按照我們預(yù)期的 IP 進行請求。

復(fù)現(xiàn)

要使用它也很簡單,主要是兩個類:

  • InetAddressResolverProvider:這是一個抽象類,我們可以繼承它之后重寫它的 get 函數(shù)返回一個 InetAddressResolver 對象
  • InetAddressResolver:一個接口,主要提供了兩個函數(shù);一個用于傳入域名返回 IP 地址,另一個反之:傳入 IP 地址返回域名。
public class MyAddressResolverProvider extends InetAddressResolverProvider {
    @Override
    public InetAddressResolver get(Configuration configuration) {
        return new MyAddressResolver();
    }
    @Override
    public String name() {
        return "MyAddressResolverProvider Internet Address Resolver Provider";
    }
}

public class MyAddressResolver implements InetAddressResolver {

    public MyAddressResolver() {
        System.out.println("=====MyAddressResolver");
    }

    @Override
    public Stream<InetAddress> lookupByName(String host, LookupPolicy lookupPolicy)
            throws UnknownHostException {
        if (host.equals("fedora")) {
            return Stream.of(InetAddress.getByAddress(new byte[] {127, 127, 10, 1}));
        }
        return Stream.of(InetAddress.getByAddress(new byte[] {127, 0, 0, 1}));
    }
    @Override
    public String lookupByAddress(byte[] addr) {
        System.out.println("++++++" + addr[0] + " " + addr[1] + " " + addr[2] + " " + addr[3]);
        return  "fedora";
    }
}

---

```java
addresses = InetAddress.getAllByName("fedora");
// output: 127 127 10 1

這里我簡單實現(xiàn)了一個對域名 fedora 的解析,會直接返回 127.127.10.1。

如果使用 IP 地址進行查詢時:

InetAddress byAddress = InetAddress.getByAddress(new byte[]{127, 127, 10, 1});

System.out.println("+++++" + byAddress.getHostName());
// output: fedora

當(dāng)然要要使得這個 SPI 生效的前提條件是我們需要新建一個文件:META-INF/services/java.net.spi.InetAddressResolverProvider里面的內(nèi)容是我們自定義類的全限定名稱:

com.example.demo.MyAddressResolverProvider

這樣一個完整的 SPI 就實現(xiàn)完成了。

正常情況下我們將應(yīng)用打包為一個 jar 之后運行:

java -jar target/demo-0.0.1-SNAPSHOT.jar

是可以看到輸出結(jié)果是符合預(yù)期的。

一旦我們使用配合上 spring boot 打包之后,也就是加上以下的依賴:

<parent>  
  <groupId>org.springframework.boot</groupId>  
  <artifactId>spring-boot-starter-parent</artifactId>  
  <version>3.2.3</version>  
  <relativePath/> <!-- lookup parent from repository -->  
</parent>

<build>  
  <plugins>  
   <plugin>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-maven-plugin</artifactId>  
   </plugin>  
  </plugins>  
</build>

再次執(zhí)行其實也沒啥問題,也能按照預(yù)期輸出結(jié)果。

但我們加上 OpenTelemetry 的 agent 時:

java  -javaagent:opentelemetry-javaagent.jar \
      -jar target/demo-0.0.1-SNAPSHOT.jar

就會發(fā)現(xiàn)在執(zhí)行解析的時候拋出了 java.net.UnknownHostException異常。

圖片圖片

從結(jié)果來看就是沒有進入我們自定義的解析器。

SPI 原理

在講排查過程之前還是要先預(yù)習(xí)下關(guān)于 Java SPI 的原理以及應(yīng)用場景。

以前寫過一個 http 框架 cicada,其中有一個可拔插 IOC 容器的功能:

就是可以自定義實現(xiàn)自己的 IOC 容器,將自己實現(xiàn)的 IOC 容器打包為一個第三方包加入到依賴中,cicada 框架就會自動使用自定義的 IOC 實現(xiàn)。

要實現(xiàn)這個功能本質(zhì)上就是要定義一個接口,然后根據(jù)依賴的不同實現(xiàn)創(chuàng)建接口的實例對象。

public interface CicadaBeanFactory {

    /**
     * Register into bean Factory
     * @param object
     */
    void register(Object object);

    /**
     * Get bean from bean Factory
     * @param name
     * @return
     * @throws Exception
     */
    Object getBean(String name) throws Exception;

    /**
     * get bean by class type
     * @param clazz
     * @param <T>
     * @return bean
     * @throws Exception
     */
    <T> T getBean(Class<T> clazz) throws Exception;

    /**
     * release all beans
     */
    void releaseBean() ;
}

獲取具體的示例代碼時就只需要使用 JDK 內(nèi)置的 ServiceLoader 進行加載即可:

public static CicadaBeanFactory getCicadaBeanFactory() {  
    ServiceLoader<CicadaBeanFactory> cicadaBeanFactories = ServiceLoader.load(CicadaBeanFactory.class);  
    if (cicadaBeanFactories.iterator().hasNext()){  
        return cicadaBeanFactories.iterator().next() ;  
    }  
    return new CicadaDefaultBean();  
}

代碼也非常的簡潔,和剛才提到的 InetAddressResolverProvider 一樣我們需要新增一個 META-INF/services/top.crossoverjie.cicada.base.bean.CicadaBeanFactory 文件來配置我們的類名稱。

private boolean hasNextService() {
    if (nextName != null) {
        return true;
    }
    if (configs == null) {
        try {
         // PREFIX = META-INF/services/
            String fullName = PREFIX + service.getName();
            if (loader == null)
                configs = ClassLoader.getSystemResources(fullName);
            else
                configs = loader.getResources(fullName);
        } catch (IOException x) {
            fail(service, "Error locating configuration files", x);
        }
    }
    while ((pending == null) || !pending.hasNext()) {
        if (!configs.hasMoreElements()) {
            return false;
        }
        pending = parse(service, configs.nextElement());
    }
    nextName = pending.next();
    return true;
}

在 ServiceLoader 類中會會去查找 META-INF/services 的文件,然后解析其中的內(nèi)容從而反射生成對應(yīng)的接口對象。

這里還有一個關(guān)鍵是通常我們的代碼都會打包為一個 JAR 包,類加載器需要加載這個  JAR 包,同時需要在這個 JAR 包里找到我們之前定義的那個 spi 文件,如果這里查不到文件那就認為沒有定義 SPI。

這個是本次問題的重點,會在后文分析原因的時候用到。

排查

因為問題就出現(xiàn)在是否使用 opentelemetry-javaagent.jar 上,所以我需要知道在使用了 agent 之后有什么區(qū)別。

從剛才的對 SPI 的原理分析,加上 agent 出現(xiàn)異常,說明理論上就是沒有讀取到我們配置的文件: java.net.spi.InetAddressResolverProvider。

于是我便開始 debug,在 ServiceLoader 加載 jar 包的時候是可以看到具體使用的是什么 classLoader 。

這是不配置 agent 的時候使用的 classLoader:使用這個 loader 是可以通過文件路徑在 jar 包中查找到我們配置的文件。

而配置上 agent 之后使用的 classLoader:卻是一個 JarLoader,這樣是無法加載到在 springboot 格式下的配置文件的,至于為什么加載不到,那就要提一下 maven 打包后的文件目錄和 spring boot 打包后的文件目錄的區(qū)別了。

這里我截圖了同樣的一份代碼不同的打包方式:上面的是傳統(tǒng) maven,下圖是 spring boot;其實主要的區(qū)別就是在 pom 中使用了一個構(gòu)建插件:

<build>  
  <plugins>  
   <plugin>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-maven-plugin</artifactId>  
   </plugin>  
  </plugins>  
</build>

或者使用 spring-boot 命令再次打包的效果也是一樣的。

會發(fā)現(xiàn) spring boot 打包后會多出一層 BOOT-INF 的文件夾,然后會在 MANIFIST.MF 文件中定義 Main-Class 和 Start-Class.

通過上面的 debug 其實會發(fā)現(xiàn) JarLoader 只能在加載 maven 打包后的文件,也就是說無法識別 BOOT-INF 這個目錄。

正常情況下 spring boot 中會有一個額外的 java.nio.file.spi.FileSystemProvider 實現(xiàn):通過這個類的實現(xiàn)可以直接從 JAR 包中加載資源,比如我們自定義的 SPI 資源等。

初步判斷使用 opentelemetry-javaagent.jar的 agent 之后,它的類加載器優(yōu)先于了 spring boot ,從而導(dǎo)致后續(xù)的加載失敗。

遠程 debug

這里穿插幾個 debug 小技巧,其中一個是遠程 debug,因為這里我是需要調(diào)試 javaagent,正常情況下是無法直接 debug 的。

所以我們可以使用以下命令啟動應(yīng)用:

java -agentlib:jdwp="transport=dt_socket,server=y,suspend=y,address=5000" -javaagent:opentelemetry-javaagent.jar \
      -jar target/demo-0.0.1-SNAPSHOT.jar

然后在 idea 中配置一個 remote 啟動。

注意這里的端口得和命令行中的保持一致。

當(dāng)應(yīng)用啟動之后便可以在 idea 中啟動這個 remote 了,這樣便可以正常 debug 了。

條件斷點

第二個是條件斷點也非常有用,有時候我們需要調(diào)試一個公共函數(shù),調(diào)用的地方非常多。

而我們只需要關(guān)心某一類行為的調(diào)用,此時就可以對這個函數(shù)中的變量進行判斷,當(dāng)他們滿足某些條件時再進入斷點,這樣可以極大的提高我們的調(diào)試效率:

配置也很簡單,只需要在斷點上右鍵就可以編輯條件了。

社區(qū)咨詢

雖然我根據(jù)現(xiàn)象初步可以猜測下原因,但依然不確定如何調(diào)整才能解決這個問題,于是便去社區(qū)提了一個 issue。

最后在社區(qū)大佬的幫助下發(fā)現(xiàn)我們需要禁用掉 OpenTelemetry agent 中的一個 resource 就可以了。

這個 resource 是由 agent 觸發(fā)的,它優(yōu)先于 spring boot 之前進行 SPI 的加載。目的是為了給 metric 和 trace 新增兩個屬性:

加載的核心代碼在這里,只要禁用掉之后就不會再加載了。

禁用前:

禁用后:

當(dāng)我們禁用掉之后就不會存在這兩個屬性了,不過我們目前并沒有使用這兩個屬性,所以為了使得 SPI 生效就只有先禁用掉了,后續(xù)再看看社區(qū)還有沒有其他的方案。

想要復(fù)現(xiàn) debug 的可以在這里嘗試:https://github.com/crossoverJie/demo

參考連接:

  • https://github.com/TogetherOS/cicada
  • https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/#packaging.repackage-goal
  • https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/10921
  • https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/resources/library/README.md#host
責(zé)任編輯:武曉燕 來源: crossoverJie
相關(guān)推薦

2016-09-08 22:54:14

2023-11-02 18:01:24

SpringMVC配置

2015-07-17 10:04:33

MKMapView優(yōu)化

2022-11-18 08:31:56

Spring日志工具

2022-06-28 08:02:44

SPISpringJava

2023-02-26 10:14:51

Spring第三方庫

2011-06-28 10:41:50

DBA

2023-02-26 00:00:01

Spring數(shù)據(jù)庫組件

2021-03-18 23:47:18

MySQLselect索引

2013-09-05 09:09:08

SDN云計算

2023-03-20 17:36:27

5G無線通信技術(shù)

2024-10-10 10:32:04

2021-07-09 06:48:29

Spring Boot應(yīng)用Keycloak

2020-10-24 13:50:59

Python編程語言

2021-12-27 10:08:16

Python編程語言

2009-01-06 15:20:01

2020-04-17 10:53:38

釣魚郵件網(wǎng)絡(luò)攻擊冠狀病毒

2013-12-23 15:46:42

2021-08-19 09:50:53

Java內(nèi)存泄漏

2022-07-20 12:23:37

GitOps軟件開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號

国产免费高清视频| 国产精品成人在线视频| 2021天堂中文幕一二区在线观| 不卡一区二区中文字幕| 日本久久亚洲电影| 国产午夜手机精彩视频| 色天天色综合| 日韩一区二区三区视频在线观看| 免费看日本毛片| 日韩子在线观看| 99精品热视频| 亚洲字幕在线观看| 337p粉嫩色噜噜噜大肥臀| 国模一区二区三区| 久久激情视频免费观看| 30一40一50老女人毛片| 精品一区二区三区在线观看视频 | 久久久久99精品成人片我成大片 | 欧美午夜性视频| 91在线免费看| 久久综合色8888| 91在线视频九色| 日本黄色中文字幕| 午夜欧美理论片| 中文字幕欧美精品日韩中文字幕| 99精品一区二区三区无码吞精 | 国产欧美一区二区视频| 一本大道伊人av久久综合| 国产精品视频久久一区| 美女精品久久久| 中文字幕第二区| 一区三区在线欧| 亚洲第一区在线观看| www.成人黄色| av亚洲一区| 色婷婷综合激情| 99爱视频在线| 国产黄大片在线观看| 一区二区三区在线观看动漫| 中文字幕久精品免| 91精品大全| 久久久五月婷婷| 精品国产一区二区三区麻豆小说 | 日本一区二区三区免费乱视频 | 一本到高清视频免费精品| 国产精品入口芒果| 麻豆av在线免费观看| 一区二区三区在线视频免费| 一级日韩一区在线观看| 日本高清视频在线观看| 亚洲国产成人在线| 亚洲精品乱码久久久久久蜜桃91| 黄色影院在线播放| 久久精品夜色噜噜亚洲a∨ | 天天精品视频| 久久精品久久久久久国产 免费| 特黄一区二区三区| 欧美疯狂party性派对| 日韩午夜在线视频| 午夜精品一区二区三级视频| 97人人精品| 日韩中文字幕精品视频| 欧美做爰啪啪xxxⅹ性| 久久久久亚洲| 欧美福利在线观看| 日韩精品国产一区二区| 亚洲一区成人| 国产精品jizz在线观看麻豆| 日韩xxx视频| 黄色小说综合网站| 亚洲在线免费看| 婷婷色在线视频| 久久久久久久久久久久久夜| 亚洲欧美国产一区二区| 在线观看av免费| 香蕉成人伊视频在线观看| 97xxxxx| 中韩乱幕日产无线码一区| 8x8x8国产精品| 成年人小视频在线观看| 伊人久久大香线蕉无限次| 夜夜嗨av色一区二区不卡| 91香蕉视频污在线观看| 伊人久久亚洲美女图片| 日韩av免费看| 国产有码在线观看| av亚洲精华国产精华精华| 日本一区二区视频| 四虎亚洲精品| 色老汉av一区二区三区| 91丝袜超薄交口足| 日韩精品免费一区二区三区竹菊| 一本大道亚洲视频| 久久久久无码国产精品不卡| 欧美资源在线| 亚洲一区二区自拍| 日韩电影免费| 亚洲卡通动漫在线| 91传媒久久久| 精品国模一区二区三区欧美 | 欧美私人免费视频| 国产精品果冻传媒| 日韩精品欧美| 91a在线视频| 99草在线视频| 国产欧美一区二区在线| av在线免费观看国产| 日本美女久久| 亚洲黄色www网站| 男人晚上看的视频| 久久亚洲图片| 狠狠色噜噜狠狠色综合久| 黄色在线免费| 欧美性生活一区| 国产在线观看无码免费视频| 伊人久久大香线| 国产精品久久视频| 性xxxxbbbb| 亚洲综合图片区| 国产福利在线免费| 奇米色欧美一区二区三区| 欧美精品免费看| 亚洲天堂999| 久久久久青草大香线综合精品| 青青草综合在线| 亚洲成人精品综合在线| 亚洲欧美在线一区| 日本三级视频在线| 精品亚洲国内自在自线福利| 日韩一区二区三区资源| 国产夫妻在线播放| 亚洲福利视频网站| 久久一级黄色片| 国产呦萝稀缺另类资源| 亚洲福利av| jizz久久久久久| 亚洲天堂免费视频| 你懂的国产在线| a亚洲天堂av| 我的公把我弄高潮了视频| а√中文在线天堂精品| 欧美富婆性猛交| 性做久久久久久久| 亚洲制服丝袜av| 日本wwwwwww| 亚洲午夜极品| 国产91色在线|亚洲| 亚洲妇熟xxxx妇色黄| 欧美一级专区免费大片| 国产三级国产精品国产国在线观看| 另类人妖一区二区av| 亚洲精品人成| 精品福利在线| 久久久精品国产一区二区| 97人妻人人澡人人爽人人精品| 国产精品久久久99| 五月天婷婷在线观看视频| 亚洲国产精品久久久久蝴蝶传媒| 亚洲va久久久噜噜噜| 91麻豆免费在线视频| 日韩欧美中文字幕制服| 久久99久久98精品免观看软件| 成人精品视频一区二区三区尤物| 国产女主播自拍| 亚洲传媒在线| 国产精品美乳在线观看| 麻豆传媒在线免费| 欧美不卡一区二区三区| 在线观看中文字幕视频| 国产午夜精品在线观看| 亚洲一区二区三区四区五区| 综合av在线| 国产日韩精品久久| 欧美成人ⅴideosxxxxx| 精品国产区一区二区三区在线观看| 91丨porny丨在线中文| 亚洲欧美日韩中文播放 | 国产精品九九九九| 亚洲国产成人tv| 白丝女仆被免费网站| 久久国产乱子精品免费女| 99热都是精品| 欧美人妖视频| 国产人妖伪娘一区91| 日本在线观看大片免费视频| 亚洲欧美国产视频| 国产又黄又爽视频| 欧美日韩性视频| 日韩在线观看免| 99精品国产一区二区三区不卡| 国产嫩草在线观看| 在线日本成人| 亚洲日本一区二区三区在线不卡| 国产精品流白浆在线观看| 国产精品久久久久久久久久三级 | 成年人视频在线观看免费| 欧美一区二区视频网站| 精品国产一区二区三区四| 亚洲欧美怡红院| 亚洲欧美日本一区| 精品一区二区av| 男女午夜激情视频| 国产精品theporn| 亚州欧美一区三区三区在线| 视频一区中文字幕精品| 国产精品久久久久久久久久尿| bbw在线视频| 麻豆国产va免费精品高清在线| 日本亚洲欧美| 亚洲电影免费观看高清| 国产精品亚洲lv粉色| 在线观看免费成人| 国产午夜激情视频| 亚洲日本成人在线观看| 免费一级做a爰片久久毛片潮| 国产精品996| 91制片厂毛片| 久久久久久久高潮| 18岁网站在线观看| 海角社区69精品视频| 正在播放亚洲| 日韩精品一区二区三区免费观看| 久久精品二区| 国产精品115| 成人动漫视频在线观看免费| 亚洲精品一区av| 国产精品视频久久久| 高清成人在线| 日韩美女毛茸茸| 涩涩视频在线| 午夜精品美女自拍福到在线| 视频在线这里都是精品| 精品国产一区二区三区久久| 91精品国产91久久久久游泳池| 亚洲色图狂野欧美| 你懂的视频在线| 精品视频久久久久久久| 亚洲日本在线播放| 国产丝袜一区二区| 手机福利小视频在线播放| 日韩精品中文字幕久久臀| 性感美女福利视频| 日韩精品免费在线视频| 视频国产在线观看| 日韩国产在线看| 精品美女视频在线观看免费软件 | 成人免费网站黄| 97se亚洲国产综合自在线观| 欲求不满的岳中文字幕| www精品美女久久久tv| 人妻少妇精品视频一区二区三区 | 欧美h视频在线| 蜜桃国内精品久久久久软件9| 久久精品日产第一区二区三区 | 婷婷久久免费视频| 亚洲a区在线视频| 91成人噜噜噜在线播放| 国产不卡一区二区在线观看| 精品五月天堂| 欧美久久综合性欧美| 欧美人妖在线| 亚洲一区二区自拍偷拍| 亚洲色图插插| 欧美精品久久久久久久自慰| 亚洲精选久久| 九九视频精品在线观看| 久国产精品韩国三级视频| 国产亚洲色婷婷久久| 岛国一区二区三区| 香蕉视频黄色在线观看| 国产精品无人区| 国产探花在线免费观看| 亚洲成国产人片在线观看| 波多野结衣啪啪| 精品1区2区3区| 成人毛片在线精品国产| 亚洲精品自拍视频| 尤物网在线观看| 久久69精品久久久久久久电影好| mm视频在线视频| 国产欧美婷婷中文| 国产亚洲成av人片在线观黄桃| 欧美一区视久久| 亚洲九九在线| 日韩av在线综合| 国产精品中文有码| 少妇精品一区二区三区| 亚洲啪啪综合av一区二区三区| 五月天婷婷丁香| 欧美日韩国产精品成人| 韩国av免费在线| 在线播放日韩av| av白虎一区| 91精品视频在线播放| 日韩伦理一区二区三区| 国产奶头好大揉着好爽视频| 国产一区二区你懂的| 99精品999| 久久久精品中文字幕麻豆发布| 朝桐光av在线| 欧美性猛片aaaaaaa做受| 神宫寺奈绪一区二区三区| 久久精品久久久久久国产 免费| 亚洲人体影院| 国产女主播一区二区三区| 日韩成人精品一区| 男人和女人啪啪网站| 国产老妇另类xxxxx| 国产123在线| 日韩欧美一区视频| 亚洲精品久久久久久动漫器材一区| 国产一区二区三区在线| 极品视频在线| 99r国产精品视频| 希岛爱理av一区二区三区| 99视频免费播放| 97精品电影院| 国产在线免费视频| 欧美一级一区二区| 91这里只有精品| 国产精品人成电影| 久草成人在线| 免费在线观看的av网站| 成人av中文字幕| 久久久99精品| 日韩一级欧美一级| aaa大片在线观看| 成人欧美一区二区三区黑人孕妇 | 亚洲一区二区电影| 欧美日韩午夜爽爽| 韩国三级中文字幕hd久久精品| 四虎国产成人精品免费一女五男| 欧美日在线观看| 色吊丝在线永久观看最新版本| 久久久亚洲影院| 成人春色在线观看免费网站| 国产一区 在线播放| 国产剧情一区在线| 青娱乐91视频| 日韩欧美在线123| 色在线视频网| 国产99视频精品免费视频36| 国产精品观看| 荫蒂被男人添免费视频| 亚洲国产美女搞黄色| 无码精品视频一区二区三区| 8050国产精品久久久久久| 欧美福利在线播放网址导航| 国产亚洲欧美在线视频| 久久这里只有精品6| 国产乱码77777777| 日韩亚洲精品视频| 久久av网站| 久久av综合网| 91丨porny丨最新| 青娱乐在线免费视频| 日韩综合中文字幕| 欧美影院精品| 少妇无码av无码专区在线观看 | 中文精品一区二区三区| 国产一区二区在线观看视频| 久久艹精品视频| 精品亚洲男同gayvideo网站| 丝袜美腿诱惑一区二区三区| 午夜精品一区二区在线观看的| 久久精品久久99精品久久| 福利所第一导航| 亚洲精品动漫100p| 亚洲精品一区三区三区在线观看| 中日韩在线视频| av午夜一区麻豆| 色婷婷久久综合中文久久蜜桃av| 精品国产美女在线| 高潮按摩久久久久久av免费| 蜜臀久久99精品久久久酒店新书| 国产精品青草综合久久久久99| 国产福利第一视频| 91国内免费在线视频| 日韩黄色大片| 制服丝袜在线第一页| 在线视频观看一区| 99视频免费在线观看| 美国av一区二区三区| 激情综合色丁香一区二区| 国产精品23p| 最新国产精品拍自在线播放| 中文字幕一区二区三区中文字幕| 免费在线观看的av网站| 一区二区三区在线免费观看| 精品视频一二三| 97久草视频| 日本欧美一区二区| 国产性生活网站| 深夜福利国产精品| 欧洲亚洲成人| aaaaaaaa毛片| 在线亚洲免费视频| 美女高潮在线观看| 国产香蕉一区二区三区| 久久精品一区蜜桃臀影院|