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

SpringBoot+Dubbo+Seata 輕松搞定分布式事務提交數據不一致難題!

云計算 分布式
如果當前的服務工程采用的是 openFeign 來實現服務遠程調用,也可以通過集成spring-cloud-starter-alibaba-seata依賴包實現分布式事務操作,其實現原理也是在遠程調用的請求頭部中插入全局事務 ID,依次傳遞到下游服務中,從而保證全局事務的統一提交和回滾操作。

一、背景介紹

在上篇文章中,我們對 Seata 的架構設計、部署方式以及使用操作做了一個簡單的介紹,相信大家對它已經有了初步的了解。

我們知道,在現有的 Spring Cloud 體系中,有兩種技術方式可以實現服務的遠程調用。

  • 方式一:通過 Http 工具向目標服務接口發起遠程調用,比如OpenFeign、Http Client等工具。
  • 方式二:通過 Dubbo 工具向目標服務接口發起遠程調用,由于 Dubbo 采用 TCP 協議進行通信,相對 HTTP 方式來說,通信效率會更高一些,應用也更廣泛

由于國內很多的項目采用 Dubbo 來實現服務的遠程調用,下面我們以此為例,詳細的介紹一下如何將 Dubbo 服務接入 Seata 來實現分布式事務操作。

二、方案實踐

我們以之前的工程為例,對其進行適度改造,改造后服務之間的交互流程可以用如下圖來簡要概括。

具體的實施過程如下。

2.1、創建服務接口

首先,創建一個簡單的 Maven 工程,命名為seata-dubbo-api,將需要對外暴露的服務接口寫入到這里。示例接口如下:

public interface StockApi {

    /**
     * 庫存扣減
     * @param productCode
     * @param count
     * @return
     */
    boolean deduct(String productCode, int count);
}

服務接口創建完成之后,接下來我們再來創建庫存服務和訂單服務。

2.2、創建庫存服務

然后,建一個 Spring Boot 工程,命名為seata-dubbo-stock,并在pom.xml中引入相關的依賴內容,示例如下:

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
    <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>

<dependencies>
    <!-- SpringBoot web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--mysql 驅動-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.0.0</version>
    </dependency>
    <!-- Nacos 服務發現 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- Dubbo -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-dubbo</artifactId>
    </dependency>
    <!-- seata 分布式事務組件 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    </dependency>
    <!-- 關聯構建的api包 -->
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>seata-dubbo-api</artifactId>
        <version>3.0-SNAPSHOT</version>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <!-- 引入 springBoot 版本號 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- 引入 spring cloud 版本號 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- 引入 spring cloud alibaba 適配的版本號 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

接著,創建一個application.properties文件并配置相關配置項,示例如下:

spring.application.name=seata-dubbo-stock
server.port=9002

# 添加數據源配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/seata-stock
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# 配置mybatis全局配置文件掃描
mybatis.config-locatinotallow=classpath:mybatis/mybatis-config.xml
# 配置mybatis的xml配置文件掃描目錄
mybatis.mapper-locatinotallow=classpath:mybatis/mapper/*.xml

# 設置Nacos的服務地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

# 指定 Dubbo 服務實現類的掃描基準包
dubbo.scan.base-packages=com.example.cloud.nacos.dubbo.seata
# 指定 Dubbo 服務暴露的協議
dubbo.protocol.name=dubbo
# 指定 Dubbo 服務協議端口,-1 表示自增端口,從 20880 開始
dubbo.protocol.port=-1
# 指定 Dubbo 服務注冊中心
dubbo.registry.address=nacos://${spring.cloud.nacos.discovery.server-addr}

# 添加Seata 配置項
# Seata 應用編號,默認為spring.application.name
seata.application-id=seata-dubbo-stock
# Seata 事務組編號,用于 TC 集群名
seata.tx-service-group=my_test_tx_group
# Seata 服務配置項,配置對應的虛擬組和分組的映射,其中127.0.0.1:8091為 seata 服務端的監聽端口
seata.service.vgroup-mapping.my_test_tx_group=default
seata.service.grouplist.default=127.0.0.1:8091

再然后,創建一個 Dubbo 服務并實現上文創建的服務接口,示例如下:

@com.alibaba.dubbo.config.annotation.Service
publicclass StockApiImpl implements StockApi {

    @Autowired
    private StockService stockService;

    @Override
    public boolean deduct(String productCode, int count) {
        try {
            stockService.deduct(productCode, count);
            // 正??鄢龓齑妫祷?true
            returntrue;
        } catch (Exception e) {
            // 失敗扣除庫存,返回 false
            returnfalse;
        }
    }
}

其中service和mapper層代碼和之前的庫存服務工程一樣,在此就不再重復粘貼了。

最后,創建一個服務啟動類并添加@EnableDiscoveryClient注解,以便將服務注冊到 Nacos。

@EnableDiscoveryClient
@MapperScan("com.example.cloud.nacos.dubbo.seata")
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

將服務啟動起來,在瀏覽器中訪問http://127.0.0.1:8848/nacos,如果不出意外的話,在 Nacos 服務列表可以看到注冊的 dubbo 服務。

2.3、創建訂單服務

訂單服務的創建過程與上文類似。

創建一個 Spring Boot 工程,命名為seata-dubbo-order,其pom.xml所需要的依賴內容和服務啟動類,與上文完全一致,在此就不重復粘貼了。

其中的web、service和mapper層代碼和之前的訂單服務工程也完全一致,在此就不再重復粘貼了。

下面,我們重點對OrderService服務進行改造,將通過 HTTP 工具調用遠程服務接口的邏輯移除,改成用 Dubbo 方式實現服務的遠程調用,示例如下:

@Component
publicclass OrderService {

    @Autowired
    private OrderMapper orderMapper;


    @com.alibaba.dubbo.config.annotation.Reference
    private StockApi stockApi;

    @GlobalTransactional
    public void create(String userId, String productCode, int orderCount) throws Exception {
        // 通過dubbo服務,實現遠程扣減庫存
        stockApi.deduct(productCode, orderCount);

        Order order = new Order();
        order.setUserId(userId);
        order.setProductCode(productCode);
        order.setCount(orderCount);
        order.setMoney(orderCount * 100);
        // 創建訂單
        orderMapper.insert(order);
    }
}

與上文類似,在application.properties配置文件中添加相關的配置項,示例如下:

spring.application.name=seata-dubbo-order
server.port=9001

# 添加數據源配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/seata-stock
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# 配置mybatis全局配置文件掃描
mybatis.config-locatinotallow=classpath:mybatis/mybatis-config.xml
# 配置mybatis的xml配置文件掃描目錄
mybatis.mapper-locatinotallow=classpath:mybatis/mapper/*.xml

# 設置Nacos的服務地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

# 指定 Dubbo 服務實現類的掃描基準包
dubbo.scan.base-packages=com.example.cloud.nacos.dubbo.seata
# 指定 Dubbo 服務暴露的協議
dubbo.protocol.name=dubbo
# 指定 Dubbo 服務協議端口,-1 表示自增端口,從 20880 開始
dubbo.protocol.port=-1
# 指定 Dubbo 服務注冊中心
dubbo.registry.address=nacos://${spring.cloud.nacos.discovery.server-addr}
# 關閉dubbo客戶端服務有效性檢查
dubbo.consumer.check=false

# 添加Seata 配置項
# Seata 應用編號,默認為spring.application.name
seata.application-id=seata-dubbo-order
# Seata 事務組編號,用于 TC 集群名
seata.tx-service-group=my_test_tx_group
# Seata 服務配置項,配置對應的虛擬組和分組的映射,其中127.0.0.1:8091為 seata 服務端的監聽端口
seata.service.vgroup-mapping.my_test_tx_group=default
seata.service.grouplist.default=127.0.0.1:8091

將服務啟動,再次訪問http://127.0.0.1:8848/nacos的服務列表,可以看到seata-dubbo-order也成功注冊到服務中心,界面如下。

2.4、服務測試

最后,我們還是一起來驗證一下如下兩種情況,看看是否能如期實現。

分布式事務正常提交

分布式事務異?;貪L

2.4.1、分布式事務正常提交

首先,重新初始化數據庫,數據庫中原始數據情況如下。

  • seata-stock庫中的庫存數據

  • seata-order庫中的訂單數據

接著,在瀏覽器中訪問http://127.0.0.1:9001/order/create?userId=張三&productCode=wahaha&orderCount=1,它會執行如下兩個動作:

  • 第一個:調用庫存服務,將產品產品編碼為wahaha的庫存減 1;
  • 第二個:如果庫存扣減成功,插入一條產品編碼為wahaha數量為 1 的訂單信息;

發起接口請求后,再次回看數據庫,看看目標數據表中的數據情況。

  • seata-stock庫中的庫存數據

  • seata-order庫中的訂單數據

從數據結果來看,與預期一致。

我們還可以通過查看服務的日志信息,來觀察分支事務的操作情況。

其中Branch commit result信息代表分支事務的二階段操作。

2.4.2、分布式事務異?;貪L

測試完正常流程之后,下面我們再來驗證一下異常流程。

修改OrderService類中create()方法代碼,在創建訂單完成之后,試圖拋出異常,測試一下扣減的庫存數據是否能正常回滾。

首先,我們還是對數據庫中原始數據進行截個圖。

  • seata-stock庫中的庫存數據

  • seata-order庫中的訂單數據

然后,再次在瀏覽器中訪問http://127.0.0.1:9001/order/create?userId=張三&productCode=wahaha&orderCount=1。

預期的結果是:兩個庫的數據應該都不會發生變化!

再次回看數據庫,觀察目標數據表中的數據情況。

  • seata-stock庫中的庫存數據

  • seata-order庫中的訂單數據

數據在5秒之內是執行成功的,為了便于觀察數據變化,我們在上文拋異常的位置停頓了 5 秒。

過 5 秒后,再次回看數據庫表中的數據情況,結果如下。

  • seata-stock庫中的庫存數據

  • seata-order庫中的訂單數據

從數據最終結果來看,與預期是一致的。

在瀏覽器中訪問http://127.0.0.1:7091,登陸 Seata TC Server 服務監控臺,還可以看到全局事務的注冊信息和狀態。

三、Seata 服務地址配置化

隨著 Seata 的集群部署數量的增加,微服務中的Seata 服務地址配置可能會越來越臃腫,此時我們可能希望借助服務注冊中心來加載 Seata TC Server 的地址,這個時候如何實現呢?

正如之前我們所介紹的,Seata TC Server 對主流的注冊中心也提供了集成,Seata 客戶端可以通過注冊中心獲取 Seata TC Server 所在的服務實例。

引入注冊中心之后,Seata 的交互流程可以用如下圖來概括。

下面我們以服務注冊中心 Nacos 為例,簡單的介紹一下它的配置方式。

3.1、Seata 服務端配置方式

打開 Seata 安裝包中conf/application.example.yml文件,找到store.registry相關配置屬性。

將其復制出來,然后拷貝到conf/application.yml文件中。

最后,重啟 Seata TC Server 服務即可。

訪問 nacos 的服務控制臺,如果看到 Seata 服務,說明服務注冊成功了。

3.2、Seata 客戶端端配置方式

以seata-dubbo-order服務為例,修改application.properties配置文件中seata相關的配置項,示例如下:

# Seata 應用編號,默認為spring.application.name
seata.application-id=seata-dubbo-stock
# Seata 事務組編號,用于 TC 集群名
seata.tx-service-group=my_test_tx_group
# Seata 服務配置項,配置對應的虛擬組和分組的映射,此處必須填寫default
seata.service.vgroup-mapping.my_test_tx_group=default
# 設置 seata 注冊中心類型為nacos,默認為 file
seata.registry.type=nacos
# 設置 seata 服務端中配置 nacos 相關信息
seata.registry.nacos.applicatinotallow=seata-server
seata.registry.nacos.server-addr=127.0.0.1:8848
seata.registry.nacos.group=SEATA_GROUP

此處的調整主要是增加 seata 的注冊中心配置,客戶端通過配置的注冊中心來獲取 Seata TC Server 服務實例地址。

最后將相關的服務進行重啟,再次在瀏覽器中訪問http://127.0.0.1:9001/order/create?userId=張三&productCode=wahaha&orderCount=1。

不出意外的話,數據測試結果與上文一致。

3.3、錯誤排查

如果測試中遇到類似如下異常信息。

這種情況通常是 seata 客戶端版本與服務端版本不兼容導致的,可以嘗試升級 seata 客戶端版本,以便與 seata 服務端進行適配。

以本文工程為例,Seata TC Server 服務端采用的1.5.2版本,而 Seata 客戶端采用的是1.1.0版本,可見兩者版本相差太大,當發起接口請求時就出現了上文的錯誤信息。

通過查閱版本號適配情況,Seata 客戶端的1.3.0版本可以與 Seata 服務端進行兼容,因此可以直接升級spring-cloud-alibaba的版本號,示例如下:

<!--原來是 2.2.1.RELEASE版本,將其升級為 2.2.3.RELEASE-->
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>

由于spring-cloud-alibaba的2.2.3.RELEASE版本中集成的seata客戶端版本號為1.3.0,當重啟服務再次發起接口請求時,一切恢復正常。

因此當代碼和配置都沒有問題時,服務無法啟動或者運行錯誤,通常情況與版本號有很大的關系??梢詸z查一下工程中的版本號與官方要求的版本號是否出現不兼容現象。

四、小結

最后總結一下,本文主要圍繞 dubbo 整合 seata 實現服務分布式事務操作做了一次知識內容的總結和整理,內容比較多,如果有描述不對的地方,歡迎大家留言指出。

如果當前的服務工程采用的是 openFeign 來實現服務遠程調用,也可以通過集成spring-cloud-starter-alibaba-seata依賴包實現分布式事務操作,其實現原理也是在遠程調用的請求頭部中插入全局事務 ID,依次傳遞到下游服務中,從而保證全局事務的統一提交和回滾操作。

五、參考

1、https://seata.apache.org/zh-cn/docs/overview/what-is-seata/

2、https://www.iocoder.cn/Seata/install/

3、https://www.iocoder.cn/Spring-Boot/Seata/

責任編輯:武曉燕 來源: 潘志的技術筆記
相關推薦

2022-06-27 08:21:05

Seata分布式事務微服務

2024-06-04 10:58:30

2022-06-21 08:27:22

Seata分布式事務

2024-05-11 07:37:43

數據Redis策略

2022-03-24 07:51:27

seata分布式事務Java

2023-07-25 09:52:00

本地事務宕機

2024-08-19 09:05:00

Seata分布式事務

2017-06-20 09:42:52

網絡安全法數據隱私法網絡安全

2022-07-10 20:24:48

Seata分布式事務

2022-06-27 08:36:27

分布式事務XA規范

2021-08-06 08:33:27

Springboot分布式Seata

2025-05-09 01:04:00

2021-11-22 16:30:30

分布式一致性分布式系統

2018-07-15 08:18:44

緩存數據庫數據

2021-06-16 08:33:02

分布式事務ACID

2025-06-09 08:00:37

分布式文件系統

2024-06-06 08:40:07

2025-04-03 09:51:37

2025-04-30 10:44:02

2021-04-23 08:15:51

Seata XA AT
點贊
收藏

51CTO技術棧公眾號

亚洲欧美国产视频| 午夜电影网亚洲视频| 91精品久久久久久久久久久| 九九视频在线免费观看| 久久资源综合| 色999日韩国产欧美一区二区| 亚洲视频电影| 亚洲AV无码精品色毛片浪潮| 香蕉国产精品偷在线观看不卡| 亚洲天堂男人天堂| 亚洲熟女乱综合一区二区| 日本在线播放一二三区| 国产精品福利影院| 国产高清不卡av| 337p粉嫩色噜噜噜大肥臀| 亚洲影视一区| 国产视频精品在线| 午夜啪啪小视频| 麻豆mv在线看| 亚洲欧美色一区| 日本一区二区三区视频免费看 | 欧美一区亚洲| 亚洲精品一二区| 久久久久中文字幕亚洲精品| 视频在线日韩| 午夜欧美在线一二页| 一区二区在线不卡| 青青国产在线| 岛国一区二区三区| 国产在线精品播放| 国产精品免费精品一区| 欧美日韩精品| 日韩视频中文字幕| 久久国产柳州莫菁门| 97久久综合精品久久久综合| 欧美人妇做爰xxxⅹ性高电影| 欧美 日韩 国产在线观看| 羞羞污视频在线观看| 国产精品网站在线观看| 久久国产精品-国产精品| 亚洲国产精品二区| 激情五月播播久久久精品| 日本一区二区不卡| 国产一区二区99| 亚洲国产高清一区| 久久99国产精品久久久久久久久| 老司机福利在线观看| 国产99久久精品一区二区300| 亚洲精品在线观看视频| 日本wwww色| 国产日韩在线观看视频| 在线成人av网站| 天天干天天爽天天射| 日韩免费电影| 在线看国产一区| 美女网站视频黄色| av亚洲一区二区三区| 色天使久久综合网天天| av无码精品一区二区三区| 伊人久久视频| 一本色道亚洲精品aⅴ| 可以免费观看av毛片| 亚洲欧洲自拍| 色呦呦国产精品| 青青在线免费观看视频| 国产成人精品一区二区三区免费| 欧美无砖砖区免费| 538任你躁在线精品免费| av成人在线观看| 欧美精品免费视频| 国产精品中文久久久久久| 成人日韩视频| 亚洲精品一区二区三区福利| 黄色国产在线观看| 凹凸成人精品亚洲精品密奴| 在线观看日韩视频| 黄色录像二级片| 狠狠噜噜久久| 2018国产精品视频| 精品国产青草久久久久96| 激情小说亚洲一区| 国产伦理久久久| 国产精品视频二区三区| 国产精品久久久久久久久久久免费看| 在线观看国产一区| 动漫一区二区| 在线观看网站黄不卡| 国产欧美一区二| 黄色网一区二区| 亚洲欧美三级伦理| 精品人妻伦九区久久aaa片| 黑丝一区二区| 日韩av免费在线播放| 91福利在线观看视频| 国产精品一二三四区| 国产精品二区三区四区| 精华区一区二区三区| 亚洲欧美成aⅴ人在线观看| 人人妻人人澡人人爽欧美一区| 91桃色在线观看| 欧美色图天堂网| 久久久久亚洲无码| 91麻豆精品国产91久久久平台| 欧美高清在线观看| 中文字幕免费高清在线观看| 成人视屏免费看| 亚洲激情一区二区三区| 第一福利在线视频| 91精品国产一区二区三区蜜臀| 亚洲天堂美女视频| 97色伦图片97综合影院| …久久精品99久久香蕉国产| 国产片在线播放| 久久久亚洲国产美女国产盗摄| 黄色网zhan| 中文另类视频| 日韩精品免费综合视频在线播放 | 一个色在线综合| 色诱视频在线观看| 超碰成人在线观看| 久久精品91久久久久久再现| 久久久久久久久久久久久av| 国产精品中文欧美| 日韩精品资源| 国产传媒在线观看| 欧美一级高清片| 欧美人妻一区二区三区| 国产亚洲综合精品| 98国产高清一区| 免费网站成人| 在线免费亚洲电影| 91精品人妻一区二区| 欧美日韩在线大尺度| 国产日韩欧美成人| 国模精品一区二区| 一本久久精品一区二区| 久久久久亚洲AV成人网人人小说| 亚洲精品极品少妇16p| 日韩免费中文字幕| 欧美中文在线| 欧美日韩激情小视频| 免费黄色a级片| 欧美私人啪啪vps| 亚洲综合成人婷婷小说| 欧美成年黄网站色视频| 欧亚洲嫩模精品一区三区| 无遮挡aaaaa大片免费看| 亚洲国产高清一区二区三区| 成人黄色片视频网站| 91精选在线| 日韩午夜中文字幕| 岛国毛片在线观看| 国产精品1区2区3区在线观看| 亚洲免费av网| 久久久久毛片免费观看| 欧美成人第一页| 亚洲成人777777| 亚洲aⅴ怡春院| 国产精品久久久免费观看| 夜夜嗨一区二区| 久中文字幕一区| 国产精品高清乱码在线观看| 亚洲午夜激情免费视频| 欧美成人一区二区三区四区| 中文字幕免费不卡| 午夜免费福利视频在线观看| 亚洲精品2区| 国产精品一区而去| 制服丝袜专区在线| 在线观看91久久久久久| 国产精品乱码一区二区| 亚洲一区二区av在线| 911亚洲精选| 国产日韩欧美一区二区三区在线观看| 久久久亚洲综合网站| 亚洲黄色网址| 色播久久人人爽人人爽人人片视av| 伊人久久久久久久久久久久| 国产精品免费视频观看| 午夜不卡福利视频| 精品91在线| 日本欧美精品久久久| 成人1区2区| 欧美精品一区二区免费| 午夜激情小视频| 色婷婷亚洲综合| 国产午夜精品理论片| 国产激情视频一区二区在线观看 | 久久一区二区三区超碰国产精品| 欧美重口乱码一区二区| 99久久久成人国产精品| 午夜精品一区二区三区av| 国产三级视频在线看| 69久久99精品久久久久婷婷| 亚洲国产综合久久| 国产日韩一级二级三级| 久久久久久国产精品日本| 99综合视频| 黄瓜视频免费观看在线观看www| 91蜜桃臀久久一区二区| 日本一区二区三区在线播放 | 九九亚洲视频| 91精品美女在线| 国产盗摄——sm在线视频| 自拍偷拍免费精品| 人妻妺妺窝人体色www聚色窝| 色婷婷亚洲婷婷| 青娱乐免费在线视频| 国产亚洲欧美一区在线观看| 国产成人精品一区二区三区在线观看| 日韩主播视频在线| 欧美在线一区视频| 97精品国产| 日本一区高清不卡| 秋霞影视一区二区三区| 99视频在线播放| 国产成人免费| 国产99久久精品一区二区| 国精产品一区一区三区mba下载| 中文字幕综合一区| 男人天堂网在线观看| 亚洲成人久久久久| 精品国产av鲁一鲁一区| 欧美日韩国产综合一区二区| 6080午夜伦理| 精品久久久久久| 妺妺窝人体色www婷婷| 亚洲色图欧洲色图| 免费看一级黄色| 国产日韩在线不卡| 9.1成人看片免费版| 97se亚洲国产综合在线| 国产女主播在线播放| 国产精品一区二区久久精品爱涩| 嫩草影院国产精品| 日本亚洲免费观看| 成人免费观看毛片| 久久久777| 伊人成色综合网| 一区二区毛片| 欧美一区二区三区爽大粗免费| 欧美1区视频| 国内自拍中文字幕| 亚洲色图88| www.-级毛片线天内射视视| 日韩欧美午夜| 亚洲精品一区国产精品| 日韩av在线中文字幕| 日韩一区二区三区高清| 亚洲综合图色| 女女同性女同一区二区三区91| 欧美亚洲色图校园春色| 国外成人免费视频| 婷婷精品视频| 欧洲亚洲一区二区| 欧美国产小视频| 欧美一级免费在线观看| 婷婷另类小说| 精品国产一区二区三区在线| 欧美成人高清| 日韩精品一区在线视频| 国产日韩一区二区三区在线播放| 日韩精品―中文字幕| 欧美一区=区| 欧美婷婷精品激情| 激情另类小说区图片区视频区| 青青草精品在线| 99免费精品视频| 无码人妻精品一区二区中文| 日本一区二区三区四区在线视频| 天堂网中文在线观看| 亚洲精品菠萝久久久久久久| 日韩精品一区三区| 欧美亚洲丝袜传媒另类| 91theporn国产在线观看| 欧美大片一区二区| 视频二区在线| 久久九九亚洲综合| 成年人视频免费在线播放| 国内外成人免费激情在线视频网站| 在线高清av| 国产在线视频不卡| 草草视频在线一区二区| 日韩和欧美的一区二区| 欧美在线网站| 色综合av综合无码综合网站| 麻豆91在线观看| 性农村xxxxx小树林| 国产欧美一区二区精品久导航 | 国产精品sm| 无码aⅴ精品一区二区三区浪潮| 免费不卡在线观看| 欧美熟妇精品一区二区蜜桃视频| 国产亚洲欧美日韩俺去了| 精品国产乱码久久久久久鸭王1| 五月天一区二区三区| 亚洲系列第一页| 亚洲国产成人av在线| av网站无病毒在线| 97国产在线观看| 欧美一区二区三区婷婷| 久久亚洲高清| 亚洲国产一成人久久精品| av观看免费在线| 国产精品一色哟哟哟| 中国女人特级毛片| 亚洲一区二区三区精品在线| 97成人在线观看| 亚洲天堂第二页| 国产福利电影在线播放| 91色中文字幕| 精品九九在线| 久久综合九色综合88i| 国产一区二区福利视频| 白白色免费视频| 性做久久久久久免费观看| 国产老妇伦国产熟女老妇视频| 亚洲色图美腿丝袜| 国产不卡人人| 国产传媒一区| 欧美韩国一区| 视频免费1区二区三区| 久久精品亚洲精品国产欧美| 日本少妇bbwbbw精品| 日韩精品一区二区三区蜜臀 | 中文字幕亚洲一区二区av在线| 中文字幕亚洲乱码熟女1区2区| 精品国产乱码久久久久久蜜臀| 97影院秋霞午夜在线观看| 国产精自产拍久久久久久| 国产欧美日韩影院| 欧美污视频网站| av在线一区二区三区| 久久免费视频播放| 日韩欧美久久一区| av网站大全在线| 91成人伦理在线电影| 伊人色**天天综合婷婷| 五月六月丁香婷婷| 亚洲视频一区在线观看| 亚洲一区中文字幕永久在线| 欲色天天网综合久久| 欧美成人毛片| 伊人av成人| 精品一区二区三区在线播放| 狂野欧美性猛交| 欧美偷拍一区二区| 天堂地址在线www| 91久久久在线| 欧美在线观看天堂一区二区三区| 九色91porny| 亚洲综合色网站| 黄色aaa毛片| 91精品国产777在线观看| 日韩欧美国产大片| 成人性做爰aaa片免费看不忠| 欧美激情一区在线观看| 在线观看视频二区| 免费av一区二区| 中文字幕亚洲在线观看| 99视频在线免费播放| 2021中文字幕一区亚洲| 午夜精品免费观看| 日韩中文在线中文网三级| 国产95亚洲| 国产二区视频在线| 久久久一区二区三区| 亚洲天堂999| 欧美精品免费在线| 国产区精品视频在线观看豆花| www.中文字幕在线| 亚洲国产激情av| 国产哺乳奶水91在线播放| 国内精品小视频在线观看| 国产一区不卡| 日本美女久久久| 午夜私人影院久久久久| 97电影在线观看| 99精品国产高清在线观看| 午夜亚洲影视| 99久久99久久精品国产| 日韩国产欧美精品在线| 久草综合在线| 国产免费黄色一级片| 亚洲国产精品成人综合色在线婷婷| 国产精品久久婷婷| 欧美一级黑人aaaaaaa做受| 91欧美在线| 无码精品一区二区三区在线播放| 欧美性猛交xxxx富婆| av片在线观看永久免费| 久久久一本精品99久久精品| 久久99久久精品欧美| 久久精品欧美一区二区| 亚洲欧美日韩国产中文| 一区二区三区视频播放| 人人爽人人av| 亚洲动漫第一页| 95在线视频| 麻豆视频成人|