精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

尤物在线网址| 天天操天天射天天爽| 一呦二呦三呦精品国产| 久久精品水蜜桃av综合天堂| 欧美最猛性xxxxx(亚洲精品)| 你懂的在线观看网站| 伊人久久在线| 国产精品人成在线观看免费| 成人a免费视频| 久久久综合久久久| 蜜臀91精品国产高清在线观看| 日本乱人伦一区| 一区二区视频国产| 亚洲国产日韩在线观看| 午夜精品亚洲| 亚洲毛片在线观看.| 色免费在线视频| 日本无删减在线| 久久久久国产免费免费| 91欧美精品午夜性色福利在线| 青草草在线视频| 蜜桃国内精品久久久久软件9| 欧美亚洲日本一区| 欧美一级爱爱视频| 欧美日韩伦理片| 蜜桃av一区二区在线观看| 久久综合伊人77777尤物| 无码人妻丰满熟妇区毛片蜜桃精品| 久热在线观看视频| 亚洲欧洲日韩一区二区三区| 国产欧美精品一区二区三区| 国产无遮挡呻吟娇喘视频| 91中文字幕精品永久在线| 精品国产伦一区二区三区观看体验 | 日韩高清一区二区| 欧美精品 日韩| 成品人视频ww入口| 国产高清一级毛片在线不卡| 精品亚洲欧美一区| 欧美专区在线观看| 国产大屁股喷水视频在线观看| 999精品视频在这里| 在线观看免费成人| 蜜桃传媒一区二区三区| 国产精品刘玥久久一区| 久久亚洲综合av| 岛国一区二区三区高清视频| 亚洲成人av网址| 喷水视频在线观看| 亚洲av毛片基地| 激情久久一区二区| 亚洲成国产人片在线观看| 日韩欧美亚洲精品| 无套内谢的新婚少妇国语播放| 国产自产高清不卡| 国产欧美日韩综合精品| 在线观看污污网站| 国产精品久久久免费| 欧美成人性色生活仑片| 成年人网站免费在线观看 | 欧美一区二区大胆人体摄影专业网站| 中文字幕无码日韩专区免费| 久久不见久久见中文字幕免费 | 欧美激情一区二区三区高清视频| 国产18无套直看片| 成人黄色av| 亚洲欧美综合区自拍另类| 久久久久久久无码| 精品视频高潮| 精品国产一区a| 国产乱淫av片| 国产伦乱精品| 日韩av在线免播放器| 影音先锋资源av| 国产乱人伦精品一区| 亚洲成人激情在线| 国产精品麻豆入口| 日韩深夜影院| 亚洲欧美一区二区精品久久久| 一边摸一边做爽的视频17国产| 国产精品久久久久av蜜臀| 亚洲成人黄色在线观看| 大尺度做爰床戏呻吟舒畅| 人体久久天天| 亚洲欧美日本另类| 久久日免费视频| 久久国产亚洲精品| 久久天天躁狠狠躁夜夜爽蜜月| 国产亚洲精品久久久久久豆腐| 99视频精品全国免费| 精品国产一区二区三区久久久| 色在线观看视频| 日韩亚洲国产精品| 国产97在线|亚洲| 中文字幕 自拍偷拍| 久久精品网址| 日本午夜在线亚洲.国产| 97人妻精品视频一区| 精品一区精品二区高清| 成人免费在线一区二区三区| 天天操天天爱天天干| 国产日韩欧美综合在线| 免费看啪啪网站| 久草在线资源站资源站| 疯狂蹂躏欧美一区二区精品| 日韩在线第三页| 国产电影一区二区| 亚洲成人1234| www成人啪啪18软件| 亚洲精品成人无限看| 久久久人成影片一区二区三区| 黄色在线观看国产| 久久99国产精品久久99| 国模一区二区三区私拍视频| 国产二区视频在线观看| 欧美高清在线一区二区| 国产一区二区三区在线免费| 99色在线观看| 欧美日韩五月天| 国产精品久久久久久亚洲色| 成人同人动漫免费观看 | 亚洲资源一区| 日韩欧美一区视频| 日韩不卡的av| 国模吧精品视频| 欧美夫妻性生活视频| 一级黄色大片视频| 国产精品白丝jk黑袜喷水| 美日韩免费视频| 黄页视频在线播放| 一本久道中文字幕精品亚洲嫩| 亚洲精品视频三区| 免费av一区| 久久久久久久久亚洲| 亚洲国产精品无码久久久| 国产高清精品网站| 亚洲无玛一区| 日韩电影大全网站| 欧美岛国在线观看| 日本视频免费一区| 国产精品久久国产精品99gif| 偷拍精品一区二区三区| 亚洲一二三四区| 女人扒开双腿让男人捅 | 成人一二三区视频| 日本一区二区三区四区五区六区| 国产黄色一区| 深夜福利日韩在线看| 最近免费中文字幕大全免费版视频| 97se亚洲国产综合自在线观| 老太脱裤子让老头玩xxxxx| 国内精品偷拍| 欧美在线视频免费播放| 日本又骚又刺激的视频在线观看| 午夜伊人狠狠久久| aaaaa级少妇高潮大片免费看| av不卡在线看| 蜜桃av噜噜一区二区三区| 欧美大胆成人| 自拍偷拍免费精品| 国产视频第一页| 亚洲综合在线免费观看| 日韩少妇一区二区| 亚洲免费一区二区| 亚洲精品久久区二区三区蜜桃臀 | 亚洲激情网站| 欧美精品一区二区三区四区五区 | 国产亚洲精品美女久久久m| 19禁羞羞电影院在线观看| 日韩高清欧美高清| 欧美一级黄视频| 18欧美乱大交hd1984| 精品国产aⅴ一区二区三区东京热| 亚洲午夜精品久久久久久app| 精品伊人久久大线蕉色首页| 午夜日韩成人影院| 北条麻妃久久精品| 无码国精品一区二区免费蜜桃| 狠狠久久亚洲欧美专区| 国产传媒视频在线| 国产成人亚洲综合a∨婷婷图片| 男女啪啪免费视频网站| 精品久久中文| 91亚洲精品丁香在线观看| videos性欧美另类高清| 色偷偷av一区二区三区| 亚洲精品国产片| 日本精品一区二区三区高清| 国产黄色的视频| 97久久精品人人做人人爽| 国产日韩欧美久久| 亚洲第一在线| 亚洲资源视频| 丝袜av一区| 91在线免费视频| 亚洲一区站长工具| 久久中文字幕在线| 激情视频在线观看免费| 日韩精品一区二区三区老鸭窝| 久久久久99精品成人片我成大片 | 欧美日韩亚洲国产成人| 美国一区二区| 亚洲综合成人婷婷小说| 免费成人美女女| 久久久久久久久久久av| 番号集在线观看| 亚洲精品久久久久国产| 国产美女精品视频国产| 在线视频一区二区三| 精品无码人妻一区二区三| 国产精品素人视频| 无遮挡aaaaa大片免费看| 国产福利一区在线| 天天干天天草天天| 久久精品国语| 青青草视频在线免费播放| 自拍视频亚洲| 一道精品一区二区三区| 久久99国产精品视频| 国产欧美一区二区三区不卡高清| 二吊插入一穴一区二区| 欧美日韩国产第一页| 欧美日韩在线看片| 一区二区成人精品| 欧洲天堂在线观看| 亚洲精品乱码久久久久久金桔影视 | 国产乱码精品一区二区三区日韩精品 | 国产精品普通话| 乡村艳史在线观看| 国内精品在线一区| 色呦呦视频在线观看| 美女少妇精品视频| 很黄的网站在线观看| 中文字幕精品一区久久久久| 欧洲亚洲精品视频| 亚洲女人被黑人巨大进入| 亚洲欧美丝袜中文综合| 亚洲精品aⅴ中文字幕乱码| 亚洲免费一级片| 欧美成人a在线| 亚洲av无码乱码在线观看性色| 在线播放日韩导航| 国产精品一区二区三区在线免费观看 | 国产日韩成人精品| 国产高清一区二区三区四区| 久久久精品综合| 亚洲av无码一区二区二三区| 26uuu国产电影一区二区| 91视频啊啊啊| av一本久道久久综合久久鬼色| 国产乱国产乱老熟300部视频| 国产传媒欧美日韩成人| 动漫美女无遮挡免费| 成人av在线资源网站| 朝桐光av一区二区三区| 91亚洲精品久久久蜜桃| 国产美女精品久久| 国产日韩av一区二区| 精品在线观看一区| 亚洲免费观看视频| 日本亚洲色大成网站www久久| 在线观看wwwxxxx| 成人黄色在线视频| 乳色吐息在线观看| 粉嫩蜜臀av国产精品网站| 中文字幕18页| 久久天天做天天爱综合色| 受虐m奴xxx在线观看| 中文字幕一区免费在线观看 | av一区二区三| 欧美一区二区成人6969| 人妻少妇精品无码专区久久| 亚洲大胆人体av| 黄色小视频在线免费观看| 国产一区二区三区在线视频| 免费av在线网址| 久久精品99无色码中文字幕| 午夜dj在线观看高清视频完整版| 国内成人精品视频| 国产精品久久久久久久久久齐齐| 国产一区二区在线免费视频| 精品午夜视频| 久久精品日产第一区二区三区| 欧美限制电影| 免费网站永久免费观看| 免费在线观看成人av| 色噜噜狠狠永久免费| 东方aⅴ免费观看久久av| 亚洲AV无码国产精品| 中文字幕一区二区三区蜜月| 久久综合亚洲色hezyo国产| 91福利视频在线| www.色日本| 在线观看久久久久久| 日韩精品亚洲人成在线观看| 国产成人一区二区三区| 日韩中文字幕在线一区| 日韩精品一区二区三区色偷偷| 欧美日韩精品| 亚洲 激情 在线| 不卡欧美aaaaa| 中国一级片在线观看| 色婷婷综合久久久久中文 | 成人性视频网站| 超碰人人干人人| 午夜欧美一区二区三区在线播放| 五月天中文字幕| 日韩av在线直播| 日韩另类在线| 成人在线中文字幕| 日本不卡高清| 99久久激情视频| 99热这里都是精品| 放荡的美妇在线播放| 欧洲国内综合视频| 欧美老女人性开放| 国内精品久久久久影院优| www.久久久久爱免| 日韩一区不卡| 久久av最新网址| 加勒比精品视频| 午夜伊人狠狠久久| 亚洲国产精品久久人人爱潘金莲 | 国产免费一区二区三区四在线播放| 久久久久久久波多野高潮日日| av不卡中文字幕| 亚洲日本在线天堂| 亚洲在线免费观看视频| 这里只有精品丝袜| 日韩不卡视频在线观看| 免费久久久一本精品久久区| 亚洲精品欧洲| 黑森林av导航| 亚洲国产成人porn| 好吊视频一二三区| 久久久久久亚洲精品中文字幕| 中文字幕日韩在线| 国产精品久久久久久久久电影网| 国产一区二区三区在线观看精品| 欧美美女性生活视频| 欧美另类videos死尸| 日韩理伦片在线| 91久久久久久久久久| 国产精品久久久久久久久久10秀| 中文字幕久久av| 亚洲另类中文字| www.蜜桃av.com| 久久免费视频在线观看| 林ゆな中文字幕一区二区| 欧美精品久久久久久久免费| 99久久精品情趣| 青青草免费观看视频| 亚洲欧美日韩精品久久奇米色影视 | 欧美精品尤物在线观看| 国产视频1区2区3区| 亚洲视频免费看| 亚洲国产精品无码久久| 2019亚洲男人天堂| 精品国产精品国产偷麻豆| 美女喷白浆视频| 亚洲丝袜自拍清纯另类| www.xxxx国产| 26uuu日韩精品一区二区| 久久91精品| 欧美午夜aaaaaa免费视频| 亚洲少妇最新在线视频| 亚洲欧美激情另类| 欧洲精品在线视频| 欧美va久久久噜噜噜久久| 中文字幕第六页| 偷拍日韩校园综合在线| 岛国在线视频免费看| 95av在线视频| 99在线精品免费视频九九视| 中文字幕 自拍| 日韩一区二区三区精品视频| 9765激情中文在线| 奇米精品在线| 国产精品一区久久久久| 日韩欧美一级视频| 久久久国产一区| 欧美一级二级三级视频| 奇米视频7777| 午夜私人影院久久久久| 日本在线免费中文字幕| 好看的日韩精品| 欧美aaa在线| 精品少妇久久久| 国产一区二区三区精品久久久| 欧美h版在线观看| 午夜精品久久久内射近拍高清| 国产精品国产三级国产三级人妇| 亚洲毛片在线播放| 国产精品久久久久久久av大片| 欧美日韩中文| 国产极品视频在线观看| 亚洲成人a**站| 国产一区二区三区免费观看在线| 97国产在线播放| 亚洲男人天堂av|