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

使用Apache Kafka創建事件驅動的Spring Boot微服務

開發 架構
事件驅動架構(EDA)是一種軟件設計模式,它使系統內部的組件通過生成和消費事件來相互通信。在這種架構中,事件表示系統內發生的重要事件,并可以在其他組件中觸發相應的操作。這種方法可以實現松散耦合的系統,提高系統的可擴展性,并能夠快速響應實時變化。

當今技術潮流中,事件驅動的微服務成為了一種轉型的力量,其中的微服務模塊通過事件實現無縫通信,提高系統的可擴展性、可適應性和敏捷性。消息隊列在事件驅動架構中起著重要作用,Apache Kafka 作為高性能、可擴展和可靠的消息隊列系統,被廣泛應用于實時數據流處理和事件驅動架構中,因此成為了事件驅動架構中的核心技術之一。

本文介紹如何使用 Apache Kafka 構建事件驅動的微服務架構。

1 事件驅動架構簡介

事件驅動架構(EDA)是一種軟件設計模式,它使系統內部的組件通過生成和消費事件來相互通信。在這種架構中,事件表示系統內發生的重要事件,并可以在其他組件中觸發相應的操作。這種方法可以實現松散耦合的系統,提高系統的可擴展性,并能夠快速響應實時變化。

2 Apache Kafka 簡介

Apache Kafka 是一個分布式、容錯的消息系統,可以處理大量數據和實時流。它采用發布-訂閱模型,生產者將消息發布到主題中,消費者通過訂閱這些主題來接收消息。Kafka 的持久存儲和副本機制確保了數據的可靠性和容錯能力,是構建實時數據流處理和事件驅動架構的理想選擇。

3 設置環境

在深入研究構建微服務之前,先確保已經設置了有效的工作環境。需要:

  • Java 開發工具包(JDK)
  • Gradle(如果您使用 gradle-wrapper,則無需安裝系統級 gradle)
  • Docker
  • 運行實例的 Apache Kafka
  • 您喜歡的代碼編輯器(例如 IntelliJ IDEA、Eclipse、VSCode)

4 具體步驟

4.1 步驟 1:設置 Spring Boot 項目

使用 Spring Initializer (https://start.spring.io/)創建一個新的 Spring Boot 項目,確保包含必要的依賴項。在項目中集成 Spring Web 以管理 Web 功能,并集成 Spring Boot DevTools 以提高開發效率。選擇 Java 21 作為開發環境,以兼容新的字符串模板和 Java 虛擬線程。

創建和保存項目文件,然后使用集成開發環境(IDE)打開它們。

在開始項目實現之前,為了保證最佳性能,可以在 application.properties 文件中啟用 Spring Boot 虛擬線程。通過這個配置,在處理 HTTP 連接時,可以在默認線程執行器中使用虛擬線程。這樣可以提高應用程序的響應速度和處理能力,特別是在高并發場景下。

spring.threads.virtual.enabled=true

4.2 步驟 2:實現文本生產者微服務

在此微服務中,將處理文本數據的上傳,并將其發布到名為 TEXT_DATA 的 Apache Kafka 主題中。

在 application.properties 中添加所需的 Apache Kafka 屬性

# src/main/resources/application.properties
spring.kafka.bootstrap-servers=localhost:9092

創建所需的組件:

TextDataProducer 類:

package com.example.kafkaapp;

import org.apache.kafka.clients.admin.NewTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaAdmin;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger;
import java.util.stream.Stream;

import static java.lang.StringTemplate.STR;

@Component
public class TextDataProducer {
    Logger logger = Logger.getLogger(getClass().getName());

    // 主題配置常量
    private final static int PARTITION_COUNT = 8;
    private final static String TOPIC = "TEXT-DATA";
    private final static short REPLICATION_FACTOR = 1;
    private final KafkaTemplate<String, String> kafkaTemplate;

    public TextDataProducer(KafkaTemplate<String, String> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    @Autowired
    public void configureTopic(KafkaAdmin kafkaAdmin) {
        kafkaAdmin.createOrModifyTopics(new NewTopic(TOPIC, PARTITION_COUNT, REPLICATION_FACTOR));
    }

    private void sendTextMessage(String text, int lineIndex) {
        if (text == null || text.isEmpty()) {
            return;
        }
        // 將 Link 消息發送到主題,根據行索引在分區上分發
        kafkaTemplate.send(TOPIC, "KEY-" + (lineIndex % PARTITION_COUNT), text);
    }

    public void sendContentOf(File file) {
        Instant before = Instant.now();
        try (Stream<String> lines = Files.lines(file.toPath())) {
            AtomicInteger counter = new AtomicInteger(0);
            lines.forEach(line -> sendTextMessage(line, counter.getAndIncrement()));
            Instant after = Instant.now();
            Duration duration = Duration.between(before, after);
            logger.info(STR."Streamed \{counter.get()} lines in \{duration.toMillis()} millisecond");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
  • 該類負責生產文本數據并將其發送到名為 TEXT-DATA 的 Kafka 主題。
  • 它使用 @Component 進行注解,使其成為 Spring 管理的組件。
  • 它具有主題配置的常量,例如 PARTITION_COUNT、TOPIC 和 REPLICATION_FACTOR。
  • configureTopic 方法使用 KafkaAdmin 配置 Kafka 主題。它使用指定的設置創建或修改主題。
  • sendTextMessage 方法將文本消息發送到 Kafka 主題,并根據行索引在分區上分布消息。

TextDataProducer 類的最重要部分是 sendContentOf(File file)方法。此方法負責逐行讀取給定文件的內容,并將每行發送到名為 TEXT-DATA 的 Kafka 主題。

TextDataController 類

package com.example.kafkaapp;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;

@RestController
public class TextDataController {

    private final TextDataProducer producer;

    public TextDataController(TextDataProducer producer) {
        this.producer = producer;
    }

    @PostMapping("/upload")
    public Optional<String> uploadTextFile(@RequestParam("file") MultipartFile file) throws IOException {
        Path tempFile = Files.createTempFile(file.getOriginalFilename(), null);
        file.transferTo(tempFile);
        Thread.ofVirtual().start(() -> producer.sendContentOf(tempFile.toFile()));
        return Optional.of(tempFile.toString());
    }
}
  • 該類是 Spring REST 控制器,用于處理 HTTP 請求。
  • 它通過構造函數將 TextDataProducer bean 注入進來。
  • uploadTextFile 方法被映射用于處理 /upload 的 POST 請求。它接受一個 multipart 文件,并上傳該文件。
  • 它創建一個臨時文件,將上傳的文件內容轉移到該文件中,使用 TextDataProducer 將臨時文件的內容發送到 Kafka,并返回臨時文件的路徑。

TextProducerApplication 類

package com.example.kafkaapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TextProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(TextProducerApplication.class, args);
    }
}
  • 是 Spring Boot 應用程序的入口點。
  • 它使用 @SpringBootApplication 注解,該注解組合了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan。
  • main 方法啟動 Spring Boot 應用程序。

實現了文本生產者后,可以使用以下命令運行項目:

./gradlew bootRun

使用 Rest 客戶端(如 Postman 或 SwaggerUI)將示例文本文件發布到 http://localhost:8080/upload 端點。此外,也可以在 IntelliJ IDEA 中使用以下原始 HTTP 命令發布文件:

### 發送包含文本和文件字段的表單
POST http://localhost:8080/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=boundary

--boundary
Content-Disposition: form-data; name="file"; filename="shakespeares.txt"

// 將上傳 "input.txt "文件
< /Users/mustafaguc/Desktop/kafka-demo-content/shakespeares.txt

--boundary

4.3 步驟 3:docker化 TextData 生產者

創建 Dockerfile,將微服務打包成 Docker 鏡像

FROM openjdk:21-slim
WORKDIR /app
COPY build/libs/text-producer-1.0.jar app.jar
EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

在構建 Docker 鏡像之前,首先需要使用 Gradle 構建微服務:

./gradlew assemble

成功構建單個微服務 jar 文件后,就可以在項目根目錄中構建 Docker 鏡像:

docker build . -t text-producer

構建成功后,運行以下命令啟動 Docker 鏡像:

docker run -it -p 8080:8080 text-producer

運行上述命令后,應該會看到以下日志:

c.e.kafkaapp.TextProducerApplication     : Starting TextProducerApplication using Java 21.0.1 with PID 4871 (/Users/mustafaguc/projects/java/text-producer/build/classes/java/main started by mustafaguc in /Users/mustafaguc/projects/java/text-producer)
c.e.kafkaapp.TextProducerApplication     : No active profile set, falling back to 1 default profile: "default"
o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
o.apache.catalina.core.StandardService   : Starting service [Tomcat]
o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.17]
o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 307 ms
o.a.k.clients.admin.AdminClientConfig    : AdminClientConfig values:
........
o.a.k.clients.admin.AdminClientConfig    : These configurations '[sasl.jaas.config, idompotence.enabled]' were supplied but are not used yet.
o.a.kafka.common.utils.AppInfoParser     : Kafka version: 3.6.1
o.a.kafka.common.utils.AppInfoParser     : Kafka commitId: 5e3c2b738d253ff5
o.a.kafka.common.utils.AppInfoParser     : Kafka startTimeMs: 1708262321726
o.a.kafka.common.utils.AppInfoParser     : App info kafka.admin.client for adminclient-1 unregistered
o.apache.kafka.common.metrics.Metrics    : Metrics scheduler closed
o.apache.kafka.common.metrics.Metrics    : Closing reporter org.apache.kafka.common.metrics.JmxReporter
o.apache.kafka.common.metrics.Metrics    : Metrics reporters closed
o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path ''
c.e.kafkaapp.TextProducerApplication     : Started TextProducerApplication in 0.764 seconds (process running for 0.976)

目前,已經實現了生產者部分。我們將在下篇文章中介紹消費者和聚合器微服務。

責任編輯:武曉燕 來源: Java學研大本營
相關推薦

2023-06-21 08:00:00

微服務架構

2024-02-06 18:05:54

微服務SpringCloud

2022-10-10 08:00:00

微服務Spring Boo容器

2023-08-08 08:00:00

架構Kafka

2023-09-15 12:30:06

微服務架構管理

2018-05-04 15:27:22

Spring Boo Web開發

2017-12-20 15:37:39

Spring Clou微服務架構

2021-11-23 23:39:19

微服務開發架構

2023-05-11 12:40:00

Spring控制器HTTP

2020-10-18 08:51:18

Spring Boot

2017-07-10 10:51:21

微服務領域事件Microservic

2017-04-19 08:58:54

微服務領域事件事件

2023-02-07 07:25:36

Spring事件驅動

2022-02-11 23:24:47

QuarkusSpringJava

2020-06-30 07:58:39

微服務Spring BootCloud

2023-04-13 15:04:57

Java微服務架構

2023-11-09 18:01:46

JavaSpring容器化

2019-12-03 11:00:08

spring bootspring-kafkJava

2022-07-28 06:50:52

微服務業務系統

2024-01-18 07:53:37

點贊
收藏

51CTO技術棧公眾號

91美女高潮出水| 日韩高清a**址| 超级碰在线观看| 黄色片一区二区三区| 久久高清免费观看| 久久久999精品免费| 手机在线成人av| 国产成人a视频高清在线观看| 亚洲欧美色综合| 国产二区不卡| 在线免费看毛片| 国产精品久久| 日韩中文字幕视频在线| 黄色网址在线视频| 91嫩草国产线观看亚洲一区二区 | 乱人伦精品视频在线观看| 日韩中文字幕在线播放| 星空大象在线观看免费播放| 欧美一区二区三区婷婷| 欧美视频免费在线| 2018中文字幕第一页| av午夜在线| 91农村精品一区二区在线| 91视频-88av| 这里只有久久精品视频| 一区二区三区国产盗摄| 欧美裸体xxxx极品少妇| 三级黄色片在线观看| 免费精品国产| 日韩成人网免费视频| 国产老头和老头xxxx×| 免费成人黄色网| 欧洲在线/亚洲| 日本不卡在线观看视频| av影片在线| 一区二区三区在线免费| 中文字幕日韩一区二区三区不卡| 美女毛片在线看| 99久久久国产精品| 精品国产一区二区三区四区精华| 精品乱子伦一区二区| 精品一区二区三区av| 国产精品av在线播放| 五月婷婷色丁香| 国产欧美大片| 98精品国产高清在线xxxx天堂| 久久久国产精品人人片| 欧美国产高潮xxxx1819| 欧美成人精品在线| 美国黄色小视频| 国产精品www.| 国语对白做受69| 久久久久久久99| 国产人成精品一区二区三| 91精品国产91| 欧美精品韩国精品| 视频一区中文字幕国产| 91极品女神在线| 综合网在线观看| 日韩—二三区免费观看av| 国产高清在线不卡| 又污又黄的网站| 国产一区 二区 三区一级| 91久久精品国产91性色| av中文字幕在线免费观看| 国产精品中文字幕日韩精品| 不卡的av一区| 日本啊v在线| 欧美激情一区二区三区不卡 | 91porn在线观看| 中文字幕亚洲电影| 91国在线高清视频| 2020国产在线| 色偷偷88欧美精品久久久| 一区二区三区免费播放| 99精品女人在线观看免费视频| 8v天堂国产在线一区二区| 农村末发育av片一区二区| 久久香蕉网站| 中文字幕精品一区久久久久 | av网页在线| 尤物在线观看一区| 亚洲午夜精品久久久久久人妖| 精品欧美日韩精品| 日韩欧美中文字幕公布| 北岛玲一区二区| 日韩免费视频| 午夜精品久久久久久久99热浪潮| 日韩人妻精品中文字幕| 精品一区二区久久久| 国产精品一区二| 日本中文字幕在线视频| 亚洲成va人在线观看| 特级丰满少妇一级| 激情亚洲另类图片区小说区| 中文字幕九色91在线| 麻豆一区二区三区精品视频| 天堂一区二区在线免费观看| 99精彩视频| 第三区美女视频在线| 亚洲综合激情小说| 黄色永久免费网站| 欧美亚洲国产日韩| 欧美成人午夜免费视在线看片 | 在线视频国产区| 日韩欧美国产高清91| 天堂在线一区二区三区| 日韩精品丝袜美腿| 九九久久综合网站| 伊人亚洲综合网| 91在线观看地址| 成人在线免费观看网址| 日韩制服诱惑| 亚洲精品美女视频| 免费中文字幕视频| 久久国产成人午夜av影院| 欧美xxxx黑人又粗又长密月| 污污视频在线| 欧美精品日韩一区| 丁香激情五月少妇| 国产精品女主播一区二区三区| 91|九色|视频| 幼a在线观看| 日本韩国一区二区三区视频| 亚洲中文字幕一区| 影音先锋中文字幕一区| 亚洲最大av在线| 欧美成年黄网站色视频| 欧美亚男人的天堂| 谁有免费的黄色网址| 老**午夜毛片一区二区三区| 国产视色精品亚洲一区二区| 麻豆蜜桃在线| 日韩欧美国产综合在线一区二区三区| 国产精品免费在线视频| 麻豆国产精品777777在线| 日韩av一区二区三区美女毛片| 高潮在线视频| 亚洲第一精品福利| 国产精彩视频在线| 成av人片一区二区| 国产免费黄色小视频| 国产欧美自拍一区| 国模精品系列视频| 午夜成人免费影院| 欧美日韩中文字幕在线| 国产精品无码午夜福利| 新67194成人永久网站| 久久综合精品一区| 国产精品久久亚洲不卡| 中文字幕视频在线免费欧美日韩综合在线看 | 欧美性猛交 xxxx| 亚洲成人777| 成人影视免费观看| 久久久久久久尹人综合网亚洲| 欧美日韩综合精品| 欧美国产日韩电影| 日韩亚洲综合在线| 精品人妻一区二区三区麻豆91 | 男人天堂1024| 亚洲区小说区图片区qvod| 国产成人久久精品| 天堂аⅴ在线地址8| 日韩一区二区三免费高清| 久久网免费视频| 91亚洲精品乱码久久久久久蜜桃| 成人一级片网站| 日本大胆欧美| 亚洲综合成人婷婷小说| 超碰在线视屏| 国产一区av在线| 国产视频在线观看视频| 亚洲无线码一区二区三区| 99re久久精品国产| 男女男精品视频| 日韩不卡视频一区二区| 免费福利视频一区| 国产精品狼人色视频一区| av毛片在线免费看| 精品夜色国产国偷在线| 97国产精品久久久| 五月天丁香久久| 日本精品久久久久中文| 国产suv一区二区三区88区| 久久成人免费观看| 欧美丰满日韩| 国产三区精品| avtt久久| 欧日韩不卡在线视频| 9色在线视频| 亚洲国产成人精品久久| 中文字幕+乱码+中文| 亚洲码国产岛国毛片在线| 日韩一级视频在线观看| 国产一区二区三区在线看麻豆| 久久久久久人妻一区二区三区| 国产精品手机在线播放 | 亚洲精品久久久狠狠狠爱| 欧美性xxxxxxx| 性色av无码久久一区二区三区| 99久久免费视频.com| 亚洲天堂av一区二区三区| 亚洲三级国产| 久久av喷吹av高潮av| 极品美女一区二区三区| 国产精品久久久久久免费观看| 最新日韩一区| 欧美一区二区色| 中中文字幕av在线| 深夜福利国产精品| 日韩a在线看| 精品人在线二区三区| 亚洲天堂中文在线| 在线日韩一区二区| 国产三级av片| 亚洲成人免费在线观看| 私库av在线播放| 1024成人网| 精品熟妇无码av免费久久| 91色.com| 亚洲一区二区在线免费| 国产成人免费在线观看| 欧美日韩精品区别| 美女久久久精品| 麻豆av免费在线| 国产视频一区在线观看一区免费| 欧美这里只有精品| 欧美a级在线| 可以免费看的黄色网址| 欧美国产偷国产精品三区| 视频一区二区三区免费观看| 天天躁日日躁狠狠躁欧美| 国产伦精品一区二区三区视频免费| 国产在线不卡一区二区三区| 国产日产久久高清欧美一区| 99热播精品免费| 国产精品一区二区三区久久久| 色综合天天色| 国产精品无av码在线观看| 性欧美超级视频| 国产a级全部精品| 国产精品久久久久av电视剧| 欧洲成人免费视频| 日韩精品三区| 国产精品亚洲欧美导航| 国产69精品久久| 国产在线观看91精品一区| 亚洲综合伊人| 亚洲xxxx视频| 99re热精品视频| 国产精品自拍首页| 三级小说欧洲区亚洲区| 欧美另类一区| 郴州新闻综合频道在线直播| 亚洲欧洲日韩精品| 99久久夜色精品国产亚洲96| 一级全黄肉体裸体全过程| www.国产成人| 欧美日韩亚洲一区在线观看| 永久免费网站视频在线观看| 综合在线一区| 成品人视频ww入口| 国产日本精品| 一级特黄性色生活片| 蜜臀国产一区二区三区在线播放| 一本色道久久亚洲综合精品蜜桃| 久久国产精品色婷婷| 亚洲精品免费一区亚洲精品免费精品一区 | 欧美肉体xxxx裸体137大胆| 亚洲自拍的二区三区| 亚洲美女视频| 男女啪啪免费视频网站| 午夜在线一区| 欧美wwwwwww| 国产成a人亚洲精| 麻豆国产精品一区| 国产精品对白交换视频| 青青草激情视频| 精品久久久久久久久久久| av片免费观看| 91精品国产欧美日韩| 欧美一级特黄aaaaaa大片在线观看 | 国产91九色视频| 2019中文亚洲字幕| 国内外成人免费视频| 俺要去色综合狠狠| 亚洲熟妇无码av在线播放| 久久久久.com| 成人免费播放视频| 国产午夜一区二区三区| 全程偷拍露脸中年夫妇| 色综合天天综合色综合av | 成人午夜视屏| 96精品久久久久中文字幕| 欧美偷窥清纯综合图区| gogogo免费高清日本写真| 99精品视频免费| 日本高清一区二区视频| 久久综合国产精品| 免费在线观看黄视频| 欧美日韩在线播放三区| 天天操天天干天天干| x99av成人免费| 在线女人免费视频| 成人欧美一区二区三区视频xxx| 国产一区二区三区网| a级黄色片免费| 免费视频最近日韩| 国产成人av无码精品| 亚洲人成在线观看一区二区| www五月天com| 欧美精品一区二区在线播放 | 欧美日韩一区二区三区不卡视频| 综合色婷婷一区二区亚洲欧美国产| 国产欧美亚洲一区| 亚洲最大视频网| 国产精品国产三级国产有无不卡 | 国产高清精品在线| 人妻无码一区二区三区免费| 亚州成人在线电影| 精品国精品国产自在久不卡| 日韩中文字幕不卡视频| 成人日韩在线| 美脚丝袜一区二区三区在线观看| 国模大胆一区二区三区| 黄色一级片免费播放| 18成人在线观看| 丰满熟女人妻一区二区三| 精品一区二区亚洲| 麻豆网站免费在线观看| 国产乱子伦精品| 影音先锋久久精品| 中文字幕在线观看91| 亚洲天堂精品视频| 91久久精品国产91性色69| 中文字幕一精品亚洲无线一区| xx欧美视频| 久久精品美女| 亚洲视频播放| 亚洲中文字幕无码av| 亚洲国产精品麻豆| 欧美自拍第一页| 欧美黑人一区二区三区| 亚洲精品a区| www.在线观看av| 国产成人亚洲综合a∨猫咪| 手机在线免费看毛片| 91精品国产色综合久久ai换脸 | 国产91成人在在线播放| 免费看久久久| 欧美s码亚洲码精品m码| 久久久久久久久久久99999| 久久精品视频2| 国产一区二区三区直播精品电影 | 国产精品.com| 亚洲精选久久| 7788色淫网站小说| 色综合久久久久综合| yiren22亚洲综合伊人22| 国产精品日韩在线播放| 亚洲国产日韩欧美在线| 一卡二卡三卡四卡五卡| 亚洲国产综合人成综合网站| 四虎永久在线观看| 国产成人精品在线观看| 久久资源中文字幕| 国产免费无码一区二区| 色综合天天综合给合国产| 高清美女视频一区| 91在线视频精品| 亚洲第一区色| 妺妺窝人体色WWW精品| 欧美军同video69gay| 黄视频在线免费看| 欧美一区二区三区四区夜夜大片| 日本最新不卡在线| 国产探花在线播放| 亚洲欧美日韩视频一区| 四虎影视成人精品国库在线观看 | 欧美日韩国产三区| 久久国产夜色精品鲁鲁99| 久久久久久久蜜桃| 亚洲天堂av在线免费观看| 亚洲精品tv| 青青青国产在线观看| 国产精品乱码人人做人人爱| 国产成人三级在线播放| 日韩av成人在线观看| 亚洲成av人电影| 国产一级二级在线观看| 欧美午夜寂寞影院| 激情网站在线| 亚洲精品tv久久久久久久久| 国产成人在线网站| 亚洲国产精品无码久久久| 欧美大胆在线视频| 欧美色图国产精品| 国产黑丝一区二区| 欧美一卡2卡3卡4卡| 高清av一区二区三区|