久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谷粒商城项目篇13_分布式高级篇_订单业务模块(提交订单幂等性、分布式事务、延时MQ实现定时任务)

發布時間:2024/3/24 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谷粒商城项目篇13_分布式高级篇_订单业务模块(提交订单幂等性、分布式事务、延时MQ实现定时任务) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄


一、訂單業務模塊

  • 訂單流程

  • 購物車跳轉訂單確認頁

  • 登錄攔截器
  • 封裝vo
  • Feign遠程調用丟失請求頭信息
  • Feign遠程異步調用丟失上下文信息
  • 提交訂單接口冪等性

  • 令牌token機制
  • 各種鎖機制
  • 各種唯一約束
  • 防重表
  • 全局請求唯一id
  • 二、分布式事務

  • 本地事務
  • 分布式事務
    • CAP定理
    • BASE理論
    • 強一致性、弱一致性、最終一致性
  • 分布式事務解決方案
    • 2PC模式
    • 柔性事務-TCC事務補償方案
    • 柔性事務-最大努力通知型方案
    • 柔性事務-可靠消息+最終一致性方案(異步確認)
  • 整合Seata分布式事務(強一致性)
  • 三、延時隊列實現定時任務

  • 場景分析
  • 概念
  • 代碼實現
  • 訂單服務
  • 庫存服務
  • 如何保證消息的可靠性
    • 消息丟失
    • 消息重復
    • 消息積壓

  • 一、訂單業務模塊

    概述

    • 電商系統涉及到 3 流,分別時信息流,資金流,物流,而訂單系統作為中樞將三者有機的集
      合起來。
    • 訂單模塊是電商系統的樞紐,在訂單這個環節上需求獲取多個模塊的數據和信息,同時對這
      些信息進行加工處理后流向下個環節,這一系列就構成了訂單的信息流通

    1.訂單流程

    不管類型如何訂單都包括正向流程和逆向流程,對應的場景就是購買商品和退換貨流程,正
    向流程就是一個正常的網購步驟:訂單生成–>支付訂單–>賣家發貨–>確認收貨–>交易成功。
    而每個步驟的背后,訂單是如何在多系統之間交互流轉的,可概括如下圖

    1、訂單創建與支付

    (1) 、訂單創建前需要預覽訂單,選擇收貨信息等
    (2) 、訂單創建需要鎖定庫存,庫存有才可創建,否則不能創建
    (3) 、訂單創建后超時未支付需要解鎖庫存
    (4) 、支付成功后,需要進行拆單,根據商品打包方式,所在倉庫,物流等進行拆單
    (5) 、支付的每筆流水都需要記錄,以待查賬
    (6) 、訂單創建,支付成功等狀態都需要給 MQ 發送消息,方便其他系統感知訂閱

    2、逆向流程

    (1) 、修改訂單,用戶沒有提交訂單,可以對訂單一些信息進行修改,比如配送信息,
    優惠信息,及其他一些訂單可修改范圍的內容,此時只需對數據進行變更即可。

    (2) 、訂單取消,用戶主動取消訂單和用戶超時未支付,兩種情況下訂單都會取消訂
    單,而超時情況是系統自動關閉訂單,所以在訂單支付的響應機制上面要做支付的
    限時處理,尤其是在前面說的下單減庫存的情形下面,可以保證快速的釋放庫存。
    另外需要需要處理的是促銷優惠中使用的優惠券,權益等視平臺規則,進行相應補
    回給用戶。

    (3) 、退款,在待發貨訂單狀態下取消訂單時,分為缺貨退款和用戶申請退款。如果是
    全部退款則訂單更新為關閉狀態,若只是做部分退款則訂單仍需進行進行,同時生
    成一條退款的售后訂單,走退款流程。退款金額需原路返回用戶的賬戶。

    (4) 、發貨后的退款,發生在倉儲貨物配送,在配送過程中商品遺失,用戶拒收,用戶
    收貨后對商品不滿意,這樣情況下用戶發起退款的售后訴求后,需要商戶進行退款
    的審核,雙方達成一致后,系統更新退款狀態,對訂單進行退款操作,金額原路返
    回用戶的賬戶,同時關閉原訂單數據。僅退款情況下暫不考慮倉庫系統變化。如果
    發生雙方協調不一致情況下,可以申請平臺客服介入。在退款訂單商戶不處理的情
    況下,系統需要做限期判斷,比如 5 天商戶不處理,退款單自動變更同意退款

    2.購物車頁跳轉到訂單確認頁

    用戶登錄狀態下查看購物車商品信息,點擊去結算,訂單詳情頁需要顯示

    • 商品最新價格、優惠信息
    • 用戶的基本信息、地址
    • 支付方式等
    • 訂單總價格
    1.登錄攔截器

    首先訂單業務都需要登錄狀態,設置一個全局攔截器LoginInterceptor

    package henu.soft.xiaosi.order.interceptor;import henu.soft.common.constant.AuthServerConstant; import henu.soft.common.to.MemberResponseTo; import org.springframework.util.AntPathMatcher; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;/*** 登錄攔截器,未登錄的用戶不能進入訂單服務*/ public class LoginInterceptor implements HandlerInterceptor {public static ThreadLocal<MemberResponseTo> loginUser = new ThreadLocal<>();@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 獲取登錄狀態HttpSession session = request.getSession();MemberResponseTo memberResponseVo = (MemberResponseTo) session.getAttribute(AuthServerConstant.LOGIN_USER);//登陸了if (memberResponseVo != null) {loginUser.set(memberResponseVo);return true;}else {session.setAttribute("msg","請先登錄!");response.sendRedirect("http://auth.gulishop.cn/login.html");return false;}}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {} }

    注冊攔截器

    package henu.soft.xiaosi.order.config;import henu.soft.xiaosi.order.interceptor.LoginInterceptor; import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration public class MyWebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");} }
    2.封裝vo
    package henu.soft.xiaosi.order.vo;import lombok.Getter; import lombok.Setter;import java.math.BigDecimal; import java.util.List; import java.util.Map;public class OrderConfirmVo {@Getter@Setter/** 會員收獲地址列表 **/private List<MemberAddressVo> memberAddressVos;@Getter @Setter/** 所有選中的購物項 **/private List<OrderItemVo> items;/** 發票記錄 **/@Getter @Setter/** 優惠券(會員積分) **/private Integer integration;/** 防止重復提交的令牌 **/@Getter @Setterprivate String orderToken;@Getter @SetterMap<Long,Boolean> stocks;public Integer getCount() {Integer count = 0;if (items != null && items.size() > 0) {for (OrderItemVo item : items) {count += item.getCount();}}return count;}/** 訂單總額 **///BigDecimal total;//計算訂單總額public BigDecimal getTotal() {BigDecimal totalNum = BigDecimal.ZERO;if (items != null && items.size() > 0) {for (OrderItemVo item : items) {//計算當前商品的總價格BigDecimal itemPrice = item.getPrice().multiply(new BigDecimal(item.getCount().toString()));//再計算全部商品的總價格totalNum = totalNum.add(itemPrice);}}return totalNum;}/** 應付價格 **///BigDecimal payPrice;public BigDecimal getPayPrice() {return getTotal();} }
    3.Feign遠程調用丟失請求頭信息

    登錄信息保存在分布式session中,瀏覽器的cookie保存這些信息,直接瀏覽器訪問controller會帶上cookie

    但是遠程調用的方法創建一個新的request對應的controller不會帶上cookie,解決辦法是加上feign的攔截器

    package henu.soft.xiaosi.cart.config;import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;@Configuration public class MyFeignConfig {@Beanpublic RequestInterceptor requestInterceptor() {return new RequestInterceptor() {@Overridepublic void apply(RequestTemplate template) {//1. 使用RequestContextHolder拿到常常請求的請求數據,同一個線程內可以獲取的到ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();if (requestAttributes != null) {HttpServletRequest request = requestAttributes.getRequest();if (request != null) {//2. 將老請求得到cookie信息放到feign請求上String cookie = request.getHeader("Cookie");template.header("Cookie", cookie);}}}};} }
    4.Feign遠程異步調用丟失上下文信息

    Feign遠程方法調用異步方法,會開啟新的線程,

    • 之前是 主線程---> 攔截器--->controller--->service都是一個主線程,可以拿到ThreadLocal線程共享的cookie信息
    • 現在是 新的異步線程--->攔截器--->controller--->service 每個異步任務對應一個線程,拿不到主線程的cookie信息

    解決辦法

    在異步方法內部重新設置 上下文信息 RequestContextHolder.setRequestAttributes(requestAttributes);

    3.提交訂單接口冪等性

    概念

    • 接口冪等性就是用戶對于同一操作發起的一次請求或者多次請求的結果是一致的,不會因
      為多次點擊而產生了副作用;
    • 比如說支付場景,用戶購買了商品支付扣款成功,但是返回結果的時候網絡異常,此時錢已經扣了,用戶再次點擊按鈕,此時會進行第二次扣款,返回結果成功,用戶查詢余額返發現多扣錢了,流水記錄也變成了兩條...,這就沒有保證接口
      的冪等性。

    防止場景

    • 用戶多次點擊按鈕
    • 用戶頁面回退再次提交
    • 微服務互相調用,由于網絡問題,導致請求失敗。feign 觸發重試機制
    • 其他業務情況

    冪等情況, 以 SQL 為例,有些操作是天然冪等的。

    • SELECT * FROM table WHER id=?,無論執行多少次都不會改變狀態,是天然的冪等。
    • UPDATE tab1 SET col1=1 WHERE col2=2,無論執行成功多少次狀態都是一致的,也是冪等操作。
    • delete from user where userid=1,多次操作,結果一樣,具備冪等性
    • insert into user(userid,name) values(1,'a')如 userid 為唯一主鍵,即重復操作上面的業務,只
      會插入一條用戶數據,具備冪等性。
    • UPDATE tab1 SET col1=col1+1 WHERE col2=2,每次執行的結果都會發生變化,不是冪等的。
    • insert into user(userid,name) values(1,'a')如 userid 不是主鍵,可以重復,那上面業務多次操
      作,數據都會新增多條,不具備冪等性。
    1.令牌token機制

    1、服務端提供了發送 token 的接口。我們在分析業務的時候,哪些業務是存在冪等問題的,
    就必須在執行業務前,先去獲取 token,服務器會把 token 保存到 redis 中。

    2、然后調用業務接口請求時,把 token 攜帶過去,一般放在請求頭部。

    3、服務器判斷 token 是否存在 redis 中,存在表示第一次請求,然后刪除 token,繼續執行業
    務。
    4、如果判斷 token 不存在 redis 中,就表示是重復操作,直接返回重復標記給 client,這樣
    就保證了業務代碼,不被重復執行。

    危險性:
    1、先刪除 token 還是后刪除 token;

    • 先刪除可能導致,業務確實沒有執行,重試還帶上之前 token,由于防重設計導致,
      請求還是不能執行。

    • 后刪除可能導致,業務處理成功,但是服務閃斷,出現超時,沒有刪除 token,別
      人繼續重試,導致業務被執行兩邊

    • 我們最好設計為先刪除 token,如果業務調用失敗,就重新獲取 token 再次請求。

    2、Token 獲取、比較和刪除必須是原子性

    • redis.get(token) 、token.equals、redis.del(token)如果這兩個操作不是原子,可能導
      致,高并發下,都 get 到同樣的數據,判斷都成功,繼續業務并發執行

    • 可以在 redis 使用 lua 腳本完成這個操作
      if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 en

    1.準備令牌

    // 常量 package henu.soft.common.constant;public class OrderConstant {public static final String USER_ORDER_TOKEN_PREFIX = "order:token"; }//6. 防重令牌String token = UUID.randomUUID().toString().replace("-", "");// 存入redisredisTemplate.opsForValue().set(OrderConstant.USER_ORDER_TOKEN_PREFIX + memberResponseTo.getId(), token, 30, TimeUnit.MINUTES);// 返回給頁面confirmVo.setOrderToken(token); <form action="http://order.gulishop.cn/submitOrder" method="post"><input id="addrInput" type="hidden" name="addrId"/><input id="payPriceInput" type="hidden" name="payPrice"><input name="orderToken" th:value="${confirmOrder.orderToken}" type="hidden"/><button class="tijiao" type="submit">提交訂單</button></form>
    2.封裝實體

    訂單實體

    package henu.soft.xiaosi.order.entity;import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName;import java.math.BigDecimal; import java.io.Serializable; import java.util.Date; import lombok.Data;/*** 訂單* * @author xiaosi* @email 2589165806@qq.com* @date 2021-07-22 23:34:48*/ @Data @TableName("oms_order") public class OrderEntity implements Serializable {private static final long serialVersionUID = 1L;/*** id*/@TableIdprivate Long id;/*** member_id*/private Long memberId;/*** 訂單號*/private String orderSn;/*** 使用的優惠券*/private Long couponId;/*** create_time*/private Date createTime;/*** 用戶名*/private String memberUsername;/*** 訂單總額*/private BigDecimal totalAmount;/*** 應付總額*/private BigDecimal payAmount;/*** 運費金額*/private BigDecimal freightAmount;/*** 促銷優化金額(促銷價、滿減、階梯價)*/private BigDecimal promotionAmount;/*** 積分抵扣金額*/private BigDecimal integrationAmount;/*** 優惠券抵扣金額*/private BigDecimal couponAmount;/*** 后臺調整訂單使用的折扣金額*/private BigDecimal discountAmount;/*** 支付方式【1->支付寶;2->微信;3->銀聯; 4->貨到付款;】*/private Integer payType;/*** 訂單來源[0->PC訂單;1->app訂單]*/private Integer sourceType;/*** 訂單狀態【0->待付款;1->待發貨;2->已發貨;3->已完成;4->已關閉;5->無效訂單】*/private Integer status;/*** 物流公司(配送方式)*/private String deliveryCompany;/*** 物流單號*/private String deliverySn;/*** 自動確認時間(天)*/private Integer autoConfirmDay;/*** 可以獲得的積分*/private Integer integration;/*** 可以獲得的成長值*/private Integer growth;/*** 發票類型[0->不開發票;1->電子發票;2->紙質發票]*/private Integer billType;/*** 發票抬頭*/private String billHeader;/*** 發票內容*/private String billContent;/*** 收票人電話*/private String billReceiverPhone;/*** 收票人郵箱*/private String billReceiverEmail;/*** 收貨人姓名*/private String receiverName;/*** 收貨人電話*/private String receiverPhone;/*** 收貨人郵編*/private String receiverPostCode;/*** 省份/直轄市*/private String receiverProvince;/*** 城市*/private String receiverCity;/*** 區*/private String receiverRegion;/*** 詳細地址*/private String receiverDetailAddress;/*** 訂單備注*/private String note;/*** 確認收貨狀態[0->未確認;1->已確認]*/private Integer confirmStatus;/*** 刪除狀態【0->未刪除;1->已刪除】*/private Integer deleteStatus;/*** 下單時使用的積分*/private Integer useIntegration;/*** 支付時間*/private Date paymentTime;/*** 發貨時間*/private Date deliveryTime;/*** 確認收貨時間*/private Date receiveTime;/*** 評價時間*/private Date commentTime;/*** 修改時間*/private Date modifyTime;}

    封裝的訂單vo

    package henu.soft.xiaosi.order.vo;import lombok.Data;import java.math.BigDecimal;@Data public class OrderSubmitVo {/** 收獲地址的id **/private Long addrId;/** 支付方式 **/private Integer payType;//無需提交要購買的商品,去購物車再獲取一遍//優惠、發票/** 防重令牌 **/private String orderToken;/** 應付價格 **/private BigDecimal payPrice;/** 訂單備注 **/private String remarks;//用戶相關的信息,直接去session中取出即可 }
    3.對應controller
    /*** 確認訂單* @param submitVo* @param model* @param attributes* @return*/@RequestMapping("/submitOrder")public String submitOrder(OrderSubmitVo submitVo, Model model, RedirectAttributes attributes) {try {SubmitOrderResponseVo responseVo = orderService.submitOrder(submitVo);Integer code = responseVo.getCode();if (code == 0) {model.addAttribute("order", responseVo.getOrder());return "pay";} else {String msg = "下單失敗;";switch (code) {case 1:msg += "防重令牌校驗失敗";break;case 2:msg += "商品價格發生變化";break;}attributes.addFlashAttribute("msg", msg);return "redirect:http://order.gulishop.cn/toTrade";}} catch (Exception e) {if (e instanceof NoStockException) {String msg = "下單失敗,商品無庫存";attributes.addFlashAttribute("msg", msg);}return "redirect:http://order.gulishop.cn/toTrade";}}
    4.對應service

    步驟

    • //1. 驗證令牌,前端傳遞的令牌和redis存儲的令牌對比
    • //2. 創建訂單、訂單項
    • //3. 驗價
    • //4. 保存訂單
    • //5. 鎖定庫存(RabbitMQ延時隊列)
    ====================== 前面傳給頁面的token ==================String token = UUID.randomUUID().toString().replace("-", "");redisTemplate.opsForValue().set(OrderConstant.USER_ORDER_TOKEN_PREFIX + memberResponseTo.getId(), token, 30, TimeUnit.MINUTES);confirmVo.setOrderToken(token);=================== 1. 驗證防重令牌 ========================MemberResponseTo memberResponseTo = LoginInterceptor.loginUser.get();String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";Long execute = redisTemplate.execute(new DefaultRedisScript<>(script, Long.class), Arrays.asList(OrderConstant.USER_ORDER_TOKEN_PREFIX + memberResponseTo.getId()), submitVo.getOrderToken());if (execute == 0L) {//1.1 防重令牌驗證失敗responseVo.setCode(1);return responseVo;} else {xxx}

    數據庫表信息

    /*** //2. 創建訂單、訂單項* @param memberResponseVo* @param submitVo* @return*/private OrderCreateTo createOrderTo(MemberResponseTo memberResponseVo, OrderSubmitVo submitVo) {//用IdWorker生成訂單號String orderSn = IdWorker.getTimeId();//構建訂單OrderEntity entity = buildOrder(memberResponseVo, submitVo,orderSn);//構建訂單項List<OrderItemEntity> orderItemEntities = buildOrderItems(orderSn);//計算價格compute(entity, orderItemEntities);OrderCreateTo createTo = new OrderCreateTo();createTo.setOrder(entity);createTo.setOrderItems(orderItemEntities);return createTo;


    驗價

    //3. 驗價BigDecimal payAmount = order.getOrder().getPayAmount();BigDecimal payPrice = submitVo.getPayPrice();if (Math.abs(payAmount.subtract(payPrice).doubleValue()) < 0.01) {xxx} /*** //4. 保存訂單* @param orderCreateTo*/private void saveOrder(OrderCreateTo orderCreateTo) {OrderEntity order = orderCreateTo.getOrder();order.setCreateTime(new Date());order.setModifyTime(new Date());this.save(order);orderItemService.saveBatch(orderCreateTo.getOrderItems());}

    鎖庫存

    封裝vo

    package henu.soft.xiaosi.order.vo;import henu.soft.common.to.OrderItemTo; import lombok.Data;import java.util.List;@Data public class WareSkuLockVo {private String OrderSn;private List<OrderItemTo> locks; } //5. 鎖定庫存List<OrderItemTo> orderItemTos = order.getOrderItems().stream().map((item) -> {OrderItemTo orderItemTo = new OrderItemTo();orderItemTo.setSkuId(item.getSkuId());orderItemTo.setCount(item.getSkuQuantity());return orderItemTo;}).collect(Collectors.toList());WareSkuLockVo lockVo = new WareSkuLockVo();lockVo.setOrderSn(order.getOrder().getOrderSn());lockVo.setLocks(orderItemTos);R r = wareFeignService.orderLockStock(lockVo);//5.1 鎖定庫存成功if (r.getCode() == 0) { // int i = 10 / 0;responseVo.setOrder(order.getOrder());responseVo.setCode(0);//發送消息到訂單延遲隊列,判斷過期訂單rabbitTemplate.convertAndSend("order-event-exchange", "order.create.order", order.getOrder());//清除購物車記錄BoundHashOperations<String, Object, Object> ops = redisTemplate.boundHashOps(CartConstant.CART_PREFIX + memberResponseTo.getId());for (OrderItemEntity orderItem : order.getOrderItems()) {ops.delete(orderItem.getSkuId().toString());}return responseVo;} else {//5.1 鎖定庫存失敗String msg = (String) r.get("msg");throw new NoStockException(msg);}
    2.各種鎖機制
    1、數據庫悲觀鎖
    • select * from xxxx where id = 1 for update;

    • 悲觀鎖使用時一般伴隨事務一起使用,數據鎖定時間可能會很長,需要根據實際情況選用。
      另外要注意的是,id 字段一定是主鍵或者唯一索引,不然可能造成鎖表的結果,處理起來會
      非常麻煩。

    2、數據庫樂觀鎖
    • update t_goods set count = count -1 , version = version + 1 where good_id=2 and version = 1

    • 這種方法適合在更新的場景中,根據 version 版本,也就是在操作庫存前先獲取當前商品的 version 版本號,然后操作的時候帶上此 version 號。我們梳理下,我們第一次操作庫存時,得到 version 為 1,調用庫存服務version 變成了 2;但返回給訂單服務出現了問題,訂單服務又一次發起調用庫存服務,當訂單服務傳如的 version 還是 1,再執行上面的 sql 語句時,就不會執行;因為 version 已經變為 2 了,where 條件就不成立。這樣就保證了不管調用幾次,只會真正的處理一次。

    • 樂觀鎖主要使用于處理讀多寫少的問題

    3、業務層分布式鎖
    • 如果多個機器可能在同一時間同時處理相同的數據,比如多臺機器定時任務都拿到了相同數
      據處理,我們就可以加分布式鎖,鎖定此數據,處理完成后釋放鎖。獲取到鎖的必須先判斷
      這個數據是否被處理過。
    3.各種唯一約束
    1、數據庫唯一約束
    • 插入數據,應該按照唯一索引進行插入,比如訂單號,相同的訂單就不可能有兩條記錄插入。
      我們在數據庫層面防止重復。
    • 這個機制是利用了數據庫的主鍵唯一約束的特性,解決了在 insert 場景時冪等問題。但主鍵
      的要求不是自增的主鍵,這樣就需要業務生成全局唯一的主鍵。
    • 如果是分庫分表場景下,路由規則要保證相同請求下,落地在同一個數據庫和同一表中,要
      不然數據庫主鍵約束就不起效果了,因為是不同的數據庫和表主鍵不相關。
    2、redis set 防重
    • 很多數據需要處理,只能被處理一次,比如我們可以計算數據的 MD5 將其放入 redis 的 set,
      每次處理數據,先看這個 MD5 是否已經存在,存在就不處理。
    4.防重表
    • 使用訂單號 orderNo 做為去重表的唯一索引,把唯一索引插入去重表,再進行業務操作,且
      他們在同一個事務中。這個保證了重復請求時,因為去重表有唯一約束,導致請求失敗,避
      免了冪等問題。這里要注意的是,去重表和業務表應該在同一庫中,這樣就保證了在同一個
      事務,即使業務操作失敗了,也會把去重表的數據回滾。這個很好的保證了數據一致性。

    • 之前說的 redis 防重也算

    5.全局請求唯一id
    • 調用接口時,生成一個唯一 id,redis 將數據保存到集合中(去重),存在即處理過。
    • 可以使用 nginx 設置每一個請求的唯一 id;
      proxy_set_header X-Request-Id $request_id

    二、分布式事務(提交訂單、鎖庫存)

    前面提交訂單調用遠程的倉庫服務鎖庫存,加上的事務是 本地事務

    • 提交訂單加上,出現異常回滾
    • 訂單保存成功,但是鎖庫存失敗,還是回滾

    但是由于不確定因素

    • 訂單保存成功了,庫存也鎖成功了,但是 由于網絡原因 并未正常完成邏輯,導致訂單保存回滾,但是鎖庫存沒有回滾
    • 訂單提交保存訂單之后,還可能調用多個其他的遠程服務,遠程父事務 并不能 很好的管理 子事務

    因此本地事務只能控制本地方法的調用,對于遠程調用,因此要求統一的分布式事務管理

    1.本地事務

    1、事務的基本性質
    數據庫事務的幾個特性:原子性(Atomicity )、一致性( Consistency )、隔離性或獨立性( Isolation)
    和持久性(Durabilily),簡稱就是 ACID;

    • 原子性:一系列的操作整體不可拆分,要么同時成功,要么同時失敗
    • 一致性:數據在事務的前后,業務整體一致。 轉賬。A:1000;B:1000; 轉 200 事務成功; A:800 B:1200
    • 隔離性:事務之間互相隔離。
    • 持久性:一旦事務成功,數據一定會落盤在數據庫

    2、事務的隔離級別isolation

    • READ UNCOMMITTED(讀未提交)
      該隔離級別的事務會讀到其它未提交事務的數據,此現象也稱之為臟讀。
    • READ COMMITTED(讀提交)
      一個事務可以讀取另一個已提交的事務,多次讀取會造成不一樣的結果,此現象稱為不可重
      復讀問題,Oracle 和 SQL Server 的默認隔離級別。
    • REPEATABLE READ(可重復讀)
      該隔離級別是 MySQL 默認的隔離級別,在同一個事務里,select 的結果是事務開始時時間
      點的狀態,因此,同樣的 select 操作讀到的結果會是一致的,但是,會有幻讀現象。MySQL
      的 InnoDB 引擎可以通過 next-key locks 機制(參考下文"行鎖的算法"一節)來避免幻讀。
    • SERIALIZABLE(序列化)
      在該隔離級別下事務都是串行順序執行的,MySQL 數據庫的 InnoDB 引擎會給讀操作隱式
      加一把讀共享鎖,從而避免了臟讀、不可重讀復讀和幻讀問題。

    3、事務的傳播行為propagation

  • PROPAGATION_REQUIRED:如果當前沒有事務,就創建一個新事務,如果當前存在事務,
    就加入該事務,該設置是最常用的設置。
  • PROPAGATION_SUPPORTS:支持當前事務,如果當前存在事務,就加入該事務,如果當
    前不存在事務,就以非事務執行。
  • PROPAGATION_MANDATORY:支持當前事務,如果當前存在事務,就加入該事務,如果
    當前不存在事務,就拋出異常。
  • PROPAGATION_REQUIRES_NEW:創建新事務,無論當前存不存在事務,都創建新事務。
  • PROPAGATION_NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當
    前事務掛起。
  • PROPAGATION_NEVER:以非事務方式執行,如果當前存在事務,則拋出異常。
  • PROPAGATION_NESTED:如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,
    則執行與 PROPAGATION_REQUIRED 類似的操作。
  • 4、SpringBoot 事務關鍵點

  • 事務的自動配置 TransactionAutoConfiguration
  • 事務的坑
    • 在同一個類里面,編寫兩個方法,內部調用的時候,會導致事務設置失效。原因是沒有用到
      代理對象的緣故。同一個service方法子事務的調用繞過了代理對象,導致直接是方法調用
    • 解決:
      0)、導入 spring-boot-starter-aop
      1)、@EnableTransactionManagement(proxyTargetClass = true)
      2)、@EnableAspectJAutoProxy(exposeProxy=true)
      3)、AopContext.currentProxy() 調用方

    2.分布式事務

    1、CAP 定理

    CAP 原則又稱 CAP 定理,指的是在一個分布式系統中

    • 一致性(Consistency):
      在分布式系統中的所有數據備份,在同一時刻是否同樣的值。(等同于所有節點訪
      問同一份最新的數據副本)
    • 可用性(Availability)
      在集群中一部分節點故障后,集群整體是否還能響應客戶端的讀寫請求。(對數據
      更新具備高可用性)
    • 分區容錯性(Partition tolerance)
      大多數分布式系統都分布在多個子網絡。每個子網絡就叫做一個區(partition)。
      分區容錯的意思是,區間通信可能失敗。比如,一臺服務器放在中國,另一臺服務
      器放在美國,這就是兩個區,它們之間可能無法通信。

    CAP 原則指的是,這三個要素最多只能同時實現兩點,不可能三者兼顧。

    • 一般來說,分區容錯無法避免,因此可以認為 CAP 的 P 總是成立。CAP 定理告訴我們,剩下的 C 和 A 無法同時做到。

    • 分布式系統中實現一致性的 raft 算法,類似redis的主從復制、哨兵模式
      paxos:http://thesecretlivesofdata.com/raft/

    • 對于多數大型互聯網應用的場景,主機眾多、部署分散,而且現在的集群規模越來越大,所
      以節點故障、網絡故障是常態,而且要保證服務可用性達到 99.99999%(N 個 9),即保證
      P 和 A,舍棄 C,即不能保證強一致,但是可以彌補強一致

    2.BASE理論

    是對 CAP 理論的延伸,思想是即使無法做到強一致性(CAP 的一致性就是強一致性),但

    • 以采用適當的采取弱一致性,即最終一致性。
    • 即不能保證強一致,但是可以彌補強一致

    BASE 是指

    • 基本可用(Basically Available)
      (1)基本可用是指分布式系統在出現故障的時候,允許損失部分可用性(例如響應時間、
      功能上的可用性),允許損失部分可用性。需要注意的是,基本可用絕不等價于系
      統不可用。
      (2)響應時間上的損失:正常情況下搜索引擎需要在 0.5 秒之內返回給用戶相應的
      查詢結果,但由于出現故障(比如系統部分機房發生斷電或斷網故障),查詢
      結果的響應時間增加到了 1~2 秒。
      (3)功能上的損失:購物網站在購物高峰(如雙十一)時,為了保護系統的穩定性,
      部分消費者可能會被引導到一個降級頁面。
    • 軟狀態( Soft State)(處于失敗、成功的中間狀態)
      軟狀態是指允許系統存在中間狀態,而該中間狀態不會影響系統整體可用性。分布
      式存儲中一般一份數據會有多個副本,允許不同副本同步的延時就是軟狀態的體
      現。mysql replication 的異步復制也是一種體現。
    • 最終一致性( Eventual Consistency)
      最終一致性是指系統中的所有數據副本經過一定時間后,最終能夠達到一致的狀
      態。弱一致性和強一致性相反,最終一致性是弱一致性的一種特殊情況
    3. 強一致性、弱一致性、最終一致性

    從客戶端角度,多進程并發訪問時,更新過的數據在不同進程如何獲取的不同策略,決定了
    不同的一致性。

    • 對于關系型數據庫,要求更新過的數據能被后續的訪問都能看到,這是強一致性。

    • 如果能容忍后續的部分或者全部訪問不到,則是弱一致性。(容忍軟件態,容忍彌補一致性的時間操作)

    • 如果經過一段時間后要求能訪問到更新后的數據,則是最終一致性

    三、分布式事務解決方案

    1. 2PC 模式

    數據庫支持的 2PC【2 phase commit 二階提交】,又叫做 XA Transactions。MySQL 從 5.5 版本開始支持,SQL Server 2005 開始支持,Oracle 7 開始支持。其中,XA 是一個兩階段提交協議,該協議分為以下兩個階段:

    • 第一階段:事務協調器要求每個涉及到事務的數據庫預提交(precommit)此操作,并反映是
      否可以提交.
    • 第二階段:事務協調器要求每個數據庫提交數據。

    其中,如果有任何一個數據庫否決此次提交,那么所有數據庫都會被要求回滾它們在此事務
    中的那部分信息。

    • XA 協議比較簡單,而且一旦商業數據庫實現了 XA 協議,使用分布式事務的成本也比較
      低。
    • XA 性能不理想,特別是在交易下單鏈路,往往并發量很高,XA 無法滿足高并發場景
    • XA 目前在商業數據庫支持的比較理想,在 mysql 數據庫中支持的不太理想,mysql 的XA 實現,沒有記錄 prepare 階段日志,主備切換回導致主庫與備庫數據不一致。
    • 許多 nosql 也沒有支持 XA,這讓 XA 的應用場景變得非常狹隘。
    • 也有 3PC,引入了超時機制(無論協調者還是參與者,在向對方發送請求后,若長時間
      未收到回應則做出相應處理)
    2. 柔性事務-TCC 事務補償型方案(遵循BASE原則)
    • 剛性事務:遵循 ACID 原則,強一致性。
    • 柔性事務:遵循 BASE 理論,最終一致性;與剛性事務不同,柔性事務允許一定時間內,不同節點的數據不一致,但要求最終一致。

    • 一階段 prepare 行為:調用 自定義 的 prepare 邏輯。該邏輯為父事務、各個子事務調用自己的try接口方法
    • 二階段 commit 行為:調用 自定義 的 commit 邏輯。該邏輯為父事務、各個子事務調用自己的confirm接口方法
    • 二階段 rollback 行為:調用 自定義 的 rollback 邏輯。該邏輯為父事務、各個子事務調用自己的cancle接口方法

    所謂 TCC 模式,是指支持把 自定義 的分支事務納入到全局事務的管理中(抽取一層)

    3.柔性事務-最大努力通知型方案

    按規律進行通知,不保證數據一定能通知成功,但會提供可查詢操作接口進行核對。

    • 這種方案主要用在與第三方系統通訊時,比如:調用微信或支付寶支付后的支付結果通知。這種方案也是結合 MQ 進行實現,例如:通過 MQ 發送 http 請求,設置最大通知次數。達到通知次數后即不再通知。
    • 案例:銀行通知、商戶通知等(各大交易業務平臺間的商戶通知:多次通知、查詢校對、對賬文件),支付寶的支付成功異步回調
    • 案例:不斷提醒訂閱MQ的服務父事務執行失敗,直到作出回應(如訂單下失敗解鎖庫存)
    4.柔性事務-可靠消息+最終一致性方案(異步確保型)
    • 實現:業務處理服務在業務事務提交之前,向實時消息服務請求發送消息,實時消息服務只
      記錄消息數據,而不是真正的發送。業務處理服務在業務事務提交之后,向實時消息服務確
      認發送。只有在得到確認發送指令后,實時消息服務才會真正發送
    /** * 1、做好消息確認機制(pulisher,consumer【手動 ack】) * 2、每一個發送的消息都在數據庫做好記錄。定期將失敗的消息再次發送一 遍 */CREATE TABLE `mq_message` (`message_id` char(32) NOT NULL, `content` text, `to_exchane` varchar(255) DEFAULT NULL, `routing_key` varchar(255) DEFAULT NULL, `class_type` varchar(255) DEFAULT NULL, `message_status` int(1) DEFAULT '0' COMMENT '0-新建 1-已發送 2-錯誤抵達 3-已抵達', `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`message_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb

    四、整合Seata

    1.概述
    • 官網:http://seata.io/zh-cn/docs/overview/what-is-seata.html
    • Seata 是一款開源的分布式事務解決方案,致力于提供高性能和簡單易用的分布式事務服務。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務模式,為用戶打造一站式的分布式解決方案。

    • TC:協調全局
    • TM:控制整個大的事務
    • RM:各個微服務獨立的資源管理器,每一個微服務都需要一個回滾日志表,即使不能回滾也要補償修改的內容
    2.建立Seata日志表

    每個微服務創建 UNDO_LOG 表,SEATA AT 模式需要 UNDO_LOG 表

    -- 注意此處0.3.0+ 增加唯一索引 ux_undo_log CREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    3.安裝事務協調器TC
    • 下載地址:https://github.com/seata/seata/releases/tag/v1.2.0
    • 解壓配置


    配置文件file.conf

    啟動nacos和seata,如果報錯參考:報錯2_Seata啟動報錯:Initialization of output ‘file=xxxlogs/seata_gc.log‘ using options ‘(null)‘ failed.

    4.整合
    • 導入依賴:https://github.com/seata/seata
    <!-- 分布式事務seata--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2.0.1.RELEASE</version><exclusions><exclusion><groupId>io.seata</groupId><artifactId>seata-all</artifactId></exclusion></exclusions></dependency><dependency><groupId>io.seata</groupId><artifactId>seata-all</artifactId><version>${seata.version}</version></dependency>

    • 配置DataSourceProxy代理各個微服務的數據源
    package henu.soft.xiaosi.order.config;import com.zaxxer.hikari.HikariDataSource; import io.seata.rm.datasource.DataSourceProxy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils;import javax.sql.DataSource;@Configuration public class MySeataConfig {@AutowiredDataSourceProperties dataSourceProperties;@Beanpublic DataSource dataSource(DataSourceProperties dataSourceProperties) {HikariDataSource dataSource = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();if (StringUtils.hasText(dataSourceProperties.getName())) {dataSource.setPoolName(dataSourceProperties.getName());}return new DataSourceProxy(dataSource);} }
    • 每個微服務的resource需要放入registry.conf、file.conf,并配置分組

    • 父事務加注解@GlobalTransactional,子事務不用,測試
    5.說明

    對于普通業務如后臺管理的業務,分布式事務解決方案可以使用 Seata的 AT 分布式事務管理,也就是上面的操作

    但是對于高并發下的場景,這種是不適合的,需要使用 柔性事務-可靠消息 + 最終一致性方案

    • 父事務失敗,發送失敗消息給子事務,子事務回滾
    • 延時隊列實現定時任務(定時任務太耗費資源),掃描數據庫表保存的鎖庫存記錄,根據訂單狀態判斷,然后將失敗的鎖庫存自動解鎖

    五、延時隊列實現定時任務

    1.場景分析

    定時任務的缺點

    • 耗費系統內存、數據庫資源
    • 時效性不能保證,30分鐘訂單未支付被關閉可能需要多輪才能被掃描出來

    父事務下訂單,子事務1鎖庫存,子事務…

    • 不需要分布式事務的場景

      • 訂單失敗,未進行到鎖庫存,只需要父事務自動回滾即可。
      • 訂單成功,庫存鎖定成功,其他子事務成功。無需回滾
    • 需要分布式事務的場景

      • 訂單成功,鎖庫存業務也成功,其他遠程子事務失敗,導致訂單回滾,需要自動解鎖庫存。
      • 訂單成功,用戶未支付、手動取消,需要自動解鎖庫存

    使用RabbitMQ的延時隊列

    • 訂單提交之后,先被放到消息隊列,到達指定時間30分鐘后發送給邏輯業務進行數據庫訂單保存
    • 訂單提交之后,庫存鎖定成功信息先被放到消息隊列,達到指定時間40分鐘后檢查訂單,訂單不存在的話自動解鎖庫存
    • 其實延時隊列就是保證 訂單狀態更新后(已支付、手動取消),判斷庫存鎖定是否邏輯正確,不正確就更正
    2.概念
    • 消息的TTL(Time To Live)消息的存活時間
    • 可以對隊列、消息設置TTL,前者沒有該隊列消費者時消息保留最大時間,后者是該消息沒有消費者是保留最大時間,超過這個時間成為死信
    • 如果隊列和消息都設置了,取二者最小的
    • 通過消息的expiration字段或者 x-message-ttl屬性來設置時間

    死信會進入死信路由(DLX對應多個隊列的路由的Dead Letter Exchage是在普通的路由加上消息轉發機制)

    • 被消費者reject拒收的消息,并且參數為requeue為false,即該消息不會被重新放入隊列
    • 設置TTL到期的消息
    • 隊列長度限制滿了。排在前面的消息被丟棄或者扔到死路由的

    使用MQ

    • 1、Queue、Exchange、Binding可以@Bean進去
    • 2、監聽消息的方法可以有三種參數(不分數量,順序)
    • Object content, Message message, Channel channel
    • 3、channel可以用來拒絕消息,否則自動ack;

    可以控制消息在一段時間變成死信,也可一控制死信轉到對應的交換機,結合二者,實現延時隊列


    建議使用隊列過期時間

    升級版

    • 不需要分布式事務的場景

      • 訂單失敗,未進行到鎖庫存,只需要父事務自動回滾即可。
      • 訂單成功,庫存鎖定成功,其他子事務成功。無需回滾。
    • 需要分布式事務的場景

      • 訂單成功,鎖庫存業務也成功,發送庫存鎖定信息到延時隊列,其他遠程子事務失敗,導致訂單回滾,需要自動解鎖庫存。
      • 訂單成功,鎖庫存業務也成功,發送庫存鎖定信息到延時隊列,用戶未支付、手動取消,需要自動解鎖庫存

    3.代碼實現
    1.訂單服務

    訂單服務

    • 訂單微服務交換機order-event-exchange
    • 延時隊列order.delay.queue
    • 死信消費隊列order.release.order.queue
    • 兩個隊列的綁定
    package henu.soft.xiaosi.order.config;import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import java.util.HashMap;@Configuration public class MyRabbitmqConfig {/*訂單微服務交換機*/@Beanpublic Exchange orderEventExchange() {/*** String name,* boolean durable,* boolean autoDelete,* Map<String, Object> arguments*/return new TopicExchange("order-event-exchange", true, false);}/*** 延時隊列* @return*/@Beanpublic Queue orderDelayQueue() {/**Queue(String name, 隊列名字boolean durable, 是否持久化boolean exclusive, 是否排他boolean autoDelete, 是否自動刪除Map<String, Object> arguments) 屬性*/HashMap<String, Object> arguments = new HashMap<>();//死信交換機arguments.put("x-dead-letter-exchange", "order-event-exchange");//死信路由鍵arguments.put("x-dead-letter-routing-key", "order.release.order");arguments.put("x-message-ttl", 60000); // 消息過期時間 1分鐘return new Queue("order.delay.queue",true,false,false,arguments);}/*** 普通隊列** @return*/@Beanpublic Queue orderReleaseQueue() {Queue queue = new Queue("order.release.order.queue", true, false, false);return queue;}/*** 創建訂單的binding* @return*/@Beanpublic Binding orderCreateBinding() {/*** String destination, 目的地(隊列名或者交換機名字)* DestinationType destinationType, 目的地類型(Queue、Exhcange)* String exchange,* String routingKey,* Map<String, Object> arguments* */return new Binding("order.delay.queue", Binding.DestinationType.QUEUE, "order-event-exchange", "order.create.order", null);}@Beanpublic Binding orderReleaseBinding() {return new Binding("order.release.order.queue",Binding.DestinationType.QUEUE,"order-event-exchange","order.release.order",null);}}
    2.庫存服務

    庫存服務

    • 一個交換機stock-event-exchange
    • 普通隊列 stock.release.stock.queue,需要service監聽,有消息證明要回滾
    • 延時隊列 stock.delay.stock.queue
    • 兩個綁定
    package henu.soft.xiaosi.ware.config;import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.Exchange; import org.springframework.amqp.core.Queue;import org.springframework.amqp.core.TopicExchange; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.lang.Nullable;import java.util.HashMap;/*** 創建MQ的交換機*/ @Configuration public class MyMQConfig {/*** 交換機* @return*/@Beanpublic Exchange stockEventExchange(){return new TopicExchange("stock-event-exchange",true,false);}/*** 普通隊列*/@Beanpublic Queue stockReleaseStockQueue(){// String name, boolean durable, boolean exclusive, boolean autoDelete, @Nullable Map<String, Object> argumentsreturn new Queue("stock.release.stock.queue",true,false,false);}/*** 延時隊列*/@Beanpublic Queue stockDelayStockQueue(){// String name, boolean durable, boolean exclusive, boolean autoDelete, @Nullable Map<String, Object> arguments/**Queue(String name, 隊列名字boolean durable, 是否持久化boolean exclusive, 是否排他boolean autoDelete, 是否自動刪除Map<String, Object> arguments) 屬性*/HashMap<String, Object> arguments = new HashMap<>();//死信交換機arguments.put("x-dead-letter-exchange", "stock-event-exchange");//死信路由鍵arguments.put("x-dead-letter-routing-key", "stock.release");arguments.put("x-message-ttl", 70000); // 消息過期時間 1分鐘return new Queue("stock.delay.stock.queue",true,false,false,arguments);}/*** 綁定*/@Beanpublic Binding stockReleaseBinding(){//String destination, Binding.DestinationType destinationType, String exchange, String routingKey, @Nullable Map<String, Object> argumentsreturn new Binding("stock.release.stock.queue", Binding.DestinationType.QUEUE,"stock-event-exchanges","stock.release.#",null);}/*** 綁定*/@Beanpublic Binding stockLockedBinding(){//String destination, Binding.DestinationType destinationType, String exchange, String routingKey, @Nullable Map<String, Object> argumentsreturn new Binding("stock.delay.stock.queue", Binding.DestinationType.QUEUE,"stock-event-exchanges","stock.delay",null);} }

    保存訂單詳情日志發給mq

    // 待鎖的商品、數量、倉庫id信息for (SkuLockVo lockVo : lockVos) {boolean lock = true;Long skuId = lockVo.getSkuId();List<Long> wareIds = lockVo.getWareIds();//如果沒有滿足條件的倉庫,拋出異常if (wareIds == null || wareIds.size() == 0) {throw new NoStockException(skuId);} else {for (Long wareId : wareIds) {// 一個個倉庫的鎖定// 成功返回1Long count = baseMapper.lockWareSku(skuId, lockVo.getNum(), wareId);if (count == 0) {lock = false;} else {//1. 鎖定成功,保存訂單詳情WareOrderTaskDetailEntity detailEntity = WareOrderTaskDetailEntity.builder().skuId(skuId).skuName("").skuNum(lockVo.getNum()).taskId(taskEntity.getId()).wareId(wareId).lockStatus(1).build();wareOrderTaskDetailService.save(detailEntity);//2. 發送庫存鎖定消息至延遲隊列StockLockedTo lockedTo = new StockLockedTo();lockedTo.setId(taskEntity.getId());StockDetailTo detailTo = new StockDetailTo();try {BeanUtils.copyProperties(detailEntity, detailTo);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}lockedTo.setDetailTo(detailTo);rabbitTemplate.convertAndSend("stock-event-exchange", "stock.locked", lockedTo);lock = true;break;}}}if (!lock) throw new NoStockException(skuId);}package henu.soft.common.to.mq;import lombok.Data;@Data public class StockDetailTo {private Long id;/*** sku_id*/private Long skuId;/*** sku_name*/private String skuName;/*** 購買個數*/private Integer skuNum;/*** 工作單id*/private Long taskId;/*** 倉庫id*/private Long wareId;/*** 鎖定狀態*/private Integer lockStatus; }
    3.庫存服務監聽死信隊列
    package henu.soft.xiaosi.ware.listener;import com.rabbitmq.client.Channel;import henu.soft.common.to.mq.OrderTo; import henu.soft.common.to.mq.StockLockedTo; import henu.soft.xiaosi.ware.service.WareSkuService; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import java.io.IOException;@Slf4j @Component @RabbitListener(queues = {"stock.release.stock.queue"}) public class StockReleaseListener {@Autowiredprivate WareSkuService wareSkuService;// 庫存回滾@RabbitHandlerpublic void handleStockLockedRelease(StockLockedTo stockLockedTo, Message message, Channel channel) throws IOException {log.info("************************收到庫存解鎖的消息********************************");try {wareSkuService.unlock(stockLockedTo);channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);} catch (Exception e) {// 重新放到消息隊列,重試機制channel.basicReject(message.getMessageProperties().getDeliveryTag(),true);}}}

    之前即使訂單失敗,父事務回滾了,但是分布式事務鎖庫存并未回滾,但是保存了

    • 成功的庫存鎖定信息到消息隊列(只有庫存鎖定成功才會發消息到延時隊列)
    • 數據庫中間表中也保存了訂單、鎖庫存關系(便于回滾)

    現在需要庫存服務監聽 用于 實現回滾,即從死信隊列獲取訂單詳情日志信息

    • 再次查詢訂單表,無該訂單號,證明父事務已經回滾,說明必須回滾鎖定的庫存,調用unlock()方法再次查詢中間表,回滾庫存
    • 再次查詢訂單表,有該訂單號,說明沒有被取消,變成了支付的訂單(因為訂單死信隊列30分鐘會被訂單模塊監聽,若是待付款則訂單號直接被關閉了,此時有訂單號,證明一定是支付過了),則無需回滾
    /*** 1、沒有這個訂單,必須解鎖庫存* 2、有這個訂單,不一定解鎖庫存* * 訂單狀態:已取消:解鎖庫存* * 已支付:不能解鎖庫存* 消息隊列解鎖庫存** @param stockLockedTo*/@Overridepublic void unlock(StockLockedTo stockLockedTo) {StockDetailTo detailTo = stockLockedTo.getDetailTo();WareOrderTaskDetailEntity detailEntity = wareOrderTaskDetailService.getById(detailTo.getId());//1.如果工作單詳情不為空,說明該庫存鎖定成功if (detailEntity != null) {WareOrderTaskEntity taskEntity = wareOrderTaskService.getById(stockLockedTo.getId());R r = orderFeignService.infoByOrderSn(taskEntity.getOrderSn());if (r.getCode() == 0) {OrderTo order = r.getData(new TypeReference<OrderTo>() {});//沒有這個訂單||訂單狀態已經取消 解鎖庫存if (order == null || order.getStatus() == OrderStatusEnum.CANCLED.getCode()) {//為保證冪等性,只有當工作單詳情處于被鎖定的情況下才進行解鎖if (detailEntity.getLockStatus() == WareTaskStatusEnum.Locked.getCode()) {unlockStock(detailTo.getSkuId(), detailTo.getSkuNum(), detailTo.getWareId(), detailEntity.getId());}}} else {throw new RuntimeException("遠程調用訂單服務失敗");}} else {//無需解鎖,因為}}private void unlockStock(Long skuId, Integer skuNum, Long wareId, Long detailId) {//數據庫中解鎖庫存數據baseMapper.unlockStock(skuId, skuNum, wareId);//更新庫存工作單詳情的狀態WareOrderTaskDetailEntity detail = WareOrderTaskDetailEntity.builder().id(detailId).lockStatus(2).build();wareOrderTaskDetailService.updateById(detail);}
    4.訂單服務監聽死信隊列關單

    分析

    • 下訂單業務成功之后,會被放到延時隊列,30分鐘后進入死信隊列,訂單模塊監聽死信隊列,此時需要先判斷訂單狀態
      • 訂單狀態為代付款狀態:需要關閉訂單
      • 訂單狀態為已付款、已發貨、已完成、已取消、售后中、售后完成等狀態:不需要關閉訂單

    訂單狀態枚舉類

    package henu.soft.xiaosi.order.enume;public enum OrderStatusEnume {CREATE_NEW(0,"待付款"),PAYED(1,"已付款"),SENDED(2,"已發貨"),RECIEVED(3,"已完成"),CANCLED(4,"已取消"),SERVICING(5,"售后中"),SERVICED(6,"售后完成");private String msg;private Integer code;public String getMsg() {return msg;}public Integer getCode() {return code;}OrderStatusEnume(Integer code, String msg){this.msg = msg;this.code = code;} }

    判斷關閉訂單

    /*** 收到過期的訂單信息,準備關閉訂單* @param orderEntity*//*** 關閉過期的的訂單* @param orderEntity*/@Overridepublic void closeOrder(OrderEntity orderEntity) throws InvocationTargetException, IllegalAccessException {//因為消息發送過來的訂單已經是很久前的了,中間可能被改動,因此要查詢最新的訂單OrderEntity newOrderEntity = this.getById(orderEntity.getId());//如果訂單還處于新創建的狀態,說明超時未支付,進行關單if (newOrderEntity.getStatus() == OrderStatusEnume.CREATE_NEW.getCode()) {OrderEntity updateOrder = new OrderEntity();updateOrder.setId(newOrderEntity.getId());updateOrder.setStatus(OrderStatusEnume.CANCLED.getCode());this.updateById(updateOrder);//關單后發送消息通知其他服務進行關單相關的操作,如解鎖庫存OrderTo orderTo = new OrderTo();BeanUtils.copyProperties(newOrderEntity,orderTo);rabbitTemplate.convertAndSend("order-event-exchange", "order.release.other",orderTo);}}

    現在出現的問題是

    • 理論上庫存死信隊列的時長比訂單死信隊列的時長要長,即 庫存是否解鎖在 訂單狀態關閉前判斷
    • 現在可能出現網絡延遲的原因,導致 庫存服務監聽的死信隊列 先 獲得數據,這時候判斷訂單狀態還存在,就沒解鎖庫存,過了一段時間才收到訂單關閉的信息,這時候庫存就會一直鎖定

    解決辦法

    • 在訂單模塊在設置一個路由鍵order.release.order.other.# 該路由鍵直接 轉發到 庫存的死信隊列stock.release.stock.queue,庫存服務監聽用于解鎖
    • 訂單釋放和庫存釋放直接綁定,也就是當有訂單關閉的時候通知庫存服務,再次判斷是否進行庫存解鎖
    /*** 在訂單模塊在設置一個路由鍵`order.release.other.#` 該路由鍵直接 轉發到 庫存的死信隊列`stock.release.stock.queue`,庫存服務監聽用于解鎖* 也就是當有訂單關閉的時候通知庫存服務,再次判斷是否進行庫存解鎖* @return*/@Beanpublic Binding orderReleaseOrderBinding() {return new Binding("stock.release.stock.queue",Binding.DestinationType.QUEUE,"order-event-exchange","order.release.other.#",null);}

    訂單服務

    庫存服務

    5.訂單提交保存

    4.如何保證消息的可靠性
    1.消息丟失
    • 消息發送出去,由于網絡問題沒有抵達服務器
      ? 做好容錯方法(try-catch),發送消息可能會網絡失敗,失敗后要有重試機制,可記錄到數據庫,采用定期掃描重發的方式
      ? 做好日志記錄,每個消息狀態是否都被服務器收到都應該記錄
      ? 做好定期重發,如果消息沒有發送成功,定期去數據庫掃描未成功的消息進行重發
    • 消息抵達Broker,Broker要將消息寫入queue、磁盤(持久化)才算成功。此時Broker尚未持久化完成,宕機。 publisher也必須加入確認回調機制,確認成功的消息,修改數據庫消息狀態。
    • 自動ACK的狀態下。消費者收到消息,但沒來得及消息然后宕機
      ? 一定開啟手動ACK,消費成功才移除,失敗或者沒來得及處理就noAck并重新入隊
    2.消息重復
    • 消息消費成功,事務已經提交,ack時,機器宕機。導致沒有ack成功,Broker的消息重新由unack變為ready,并發送給其他消費者
      ? 消息消費失敗,由于重試機制,自動又將消息發送出去
      ? 成功消費,ack時宕機,消息由unack變為ready,Broker又重新發送
      ? 消費者的業務消費接口應該設計為冪等性的。比如扣庫存有工作單的狀態標志
    • 使用防重表(redis/mysql),發送消息每一個都有業務的唯一標識,處理過就不用處理
    • rabbitMQ的每一個消息都有redelivered字段,可以獲取是否是被重新投遞過來的,而不是第一次投遞過來的
    3.消息積壓
    • 消費者宕機積壓
    • 消費者消費能力不足積壓
    • 發送者發送流量太大
      ? 上線更多的消費者,進行正常消費
      ? 上線專門的隊列消費服務,將消息先批量取出來,記錄數據庫,離線慢慢處理

    總結

    以上是生活随笔為你收集整理的谷粒商城项目篇13_分布式高级篇_订单业务模块(提交订单幂等性、分布式事务、延时MQ实现定时任务)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产乱子伦视频在线播放 | 亚无码乱人伦一区二区 | 国产suv精品一区二区五 | 午夜福利不卡在线视频 | 东京一本一道一二三区 | 老太婆性杂交欧美肥老太 | 久久亚洲精品成人无码 | 97无码免费人妻超级碰碰夜夜 | 国产另类ts人妖一区二区 | 少妇被黑人到高潮喷出白浆 | 男女超爽视频免费播放 | 人妻aⅴ无码一区二区三区 | 漂亮人妻洗澡被公强 日日躁 | 国产网红无码精品视频 | 亚洲精品午夜国产va久久成人 | 国产午夜无码视频在线观看 | 成人性做爰aaa片免费看 | 性欧美牲交xxxxx视频 | 日韩成人一区二区三区在线观看 | 久热国产vs视频在线观看 | 丰满少妇高潮惨叫视频 | 日本熟妇人妻xxxxx人hd | 丰满少妇弄高潮了www | 中文字幕无码av激情不卡 | 国产艳妇av在线观看果冻传媒 | 97色伦图片97综合影院 | 久久无码人妻影院 | 六十路熟妇乱子伦 | 成人免费视频视频在线观看 免费 | 欧美日本日韩 | 女人高潮内射99精品 | 亚洲成av人在线观看网址 | 狠狠色欧美亚洲狠狠色www | 亚洲狠狠婷婷综合久久 | 精品国产一区av天美传媒 | 国产欧美亚洲精品a | 好男人社区资源 | 超碰97人人做人人爱少妇 | 亚洲中文字幕成人无码 | 亚洲va欧美va天堂v国产综合 | 欧美国产日韩亚洲中文 | 在线播放亚洲第一字幕 | 在线欧美精品一区二区三区 | 亚洲中文字幕乱码av波多ji | 日韩人妻无码中文字幕视频 | 国产一区二区三区四区五区加勒比 | 熟妇激情内射com | 内射爽无广熟女亚洲 | 久久国产精品_国产精品 | 成人亚洲精品久久久久 | 亚洲精品国产精品乱码视色 | 欧美激情一区二区三区成人 | 天天做天天爱天天爽综合网 | 国语精品一区二区三区 | 国产成人综合在线女婷五月99播放 | 中文毛片无遮挡高清免费 | 妺妺窝人体色www在线小说 | 久久99精品久久久久久动态图 | 色一情一乱一伦 | 精品偷拍一区二区三区在线看 | 最近中文2019字幕第二页 | 国产精品怡红院永久免费 | 超碰97人人做人人爱少妇 | 久久精品人人做人人综合试看 | 无套内射视频囯产 | 乌克兰少妇xxxx做受 | 欧美日韩综合一区二区三区 | 捆绑白丝粉色jk震动捧喷白浆 | 国产人妻精品一区二区三区 | 亚洲熟妇色xxxxx欧美老妇 | 精品人人妻人人澡人人爽人人 | 风流少妇按摩来高潮 | 国产精品va在线观看无码 | 国产成人无码一二三区视频 | 国产无套内射久久久国产 | 一区二区三区乱码在线 | 欧洲 | 高潮毛片无遮挡高清免费视频 | 少妇被黑人到高潮喷出白浆 | yw尤物av无码国产在线观看 | 四虎永久在线精品免费网址 | 欧美阿v高清资源不卡在线播放 | 国内精品久久久久久中文字幕 | 激情亚洲一区国产精品 | 天天av天天av天天透 | 日本欧美一区二区三区乱码 | 爽爽影院免费观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 强开小婷嫩苞又嫩又紧视频 | 天堂亚洲免费视频 | 国产精品18久久久久久麻辣 | 久久亚洲中文字幕无码 | 又大又黄又粗又爽的免费视频 | 日韩欧美中文字幕在线三区 | 中文精品无码中文字幕无码专区 | 亚洲色欲色欲欲www在线 | 国内精品人妻无码久久久影院蜜桃 | 无码人妻久久一区二区三区不卡 | 无码精品人妻一区二区三区av | 波多野结衣 黑人 | 国产精品高潮呻吟av久久 | 野外少妇愉情中文字幕 | 欧美日本精品一区二区三区 | 国产综合色产在线精品 | 18精品久久久无码午夜福利 | 男人的天堂av网站 | 亚洲午夜无码久久 | 狠狠躁日日躁夜夜躁2020 | 日本大香伊一区二区三区 | 精品欧美一区二区三区久久久 | 美女扒开屁股让男人桶 | 兔费看少妇性l交大片免费 | 日日碰狠狠丁香久燥 | 久久久精品456亚洲影院 | 熟妇女人妻丰满少妇中文字幕 | 人人爽人人澡人人人妻 | 正在播放东北夫妻内射 | 亚洲一区二区三区偷拍女厕 | 亚洲a无码综合a国产av中文 | 国产黑色丝袜在线播放 | 国产成人精品三级麻豆 | 国产成人一区二区三区在线观看 | 亚洲色偷偷偷综合网 | 亚洲成av人在线观看网址 | 亚洲va中文字幕无码久久不卡 | 装睡被陌生人摸出水好爽 | 久久久久国色av免费观看性色 | 无码播放一区二区三区 | 少妇太爽了在线观看 | 少妇人妻偷人精品无码视频 | 国产无遮挡又黄又爽又色 | 欧美性色19p | av无码久久久久不卡免费网站 | 亚洲自偷精品视频自拍 | 亚洲国产精华液网站w | 国产精品国产自线拍免费软件 | √8天堂资源地址中文在线 | a在线亚洲男人的天堂 | 无码人妻少妇伦在线电影 | 中文久久乱码一区二区 | 午夜性刺激在线视频免费 | 蜜桃臀无码内射一区二区三区 | 欧美精品免费观看二区 | 99久久久无码国产精品免费 | 欧美黑人性暴力猛交喷水 | 无码人中文字幕 | 丰满人妻一区二区三区免费视频 | 久久综合狠狠综合久久综合88 | 国产精品美女久久久久av爽李琼 | 丰满诱人的人妻3 | 日本精品久久久久中文字幕 | 久久国产36精品色熟妇 | 激情亚洲一区国产精品 | 2019午夜福利不卡片在线 | aⅴ在线视频男人的天堂 | 国产精品嫩草久久久久 | 免费无码一区二区三区蜜桃大 | 日韩 欧美 动漫 国产 制服 | 国产午夜精品一区二区三区嫩草 | 久久无码中文字幕免费影院蜜桃 | 国産精品久久久久久久 | 免费人成网站视频在线观看 | 激情爆乳一区二区三区 | 亚洲精品一区二区三区在线观看 | 久久久中文字幕日本无吗 | 久久久婷婷五月亚洲97号色 | 亚洲国产精品一区二区第一页 | 爆乳一区二区三区无码 | 狠狠色欧美亚洲狠狠色www | 国产极品美女高潮无套在线观看 | 日本大香伊一区二区三区 | 少妇无码吹潮 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 色一情一乱一伦一视频免费看 | 男女下面进入的视频免费午夜 | 日本又色又爽又黄的a片18禁 | 福利一区二区三区视频在线观看 | 思思久久99热只有频精品66 | 久久久久亚洲精品男人的天堂 | a在线观看免费网站大全 | 免费播放一区二区三区 | 1000部啪啪未满十八勿入下载 | 国产一区二区三区四区五区加勒比 | 红桃av一区二区三区在线无码av | 亚洲熟悉妇女xxx妇女av | 2020最新国产自产精品 | 伊在人天堂亚洲香蕉精品区 | 久久人人97超碰a片精品 | 久久久久se色偷偷亚洲精品av | 狠狠色噜噜狠狠狠狠7777米奇 | 帮老师解开蕾丝奶罩吸乳网站 | 国产无遮挡又黄又爽又色 | 国内老熟妇对白xxxxhd | 午夜嘿嘿嘿影院 | 久久久精品人妻久久影视 | 国产精品香蕉在线观看 | 亚洲精品一区二区三区大桥未久 | 老头边吃奶边弄进去呻吟 | 婷婷丁香六月激情综合啪 | 日本一区二区更新不卡 | 无码成人精品区在线观看 | 97色伦图片97综合影院 | 亚洲精品国产品国语在线观看 | 国产无av码在线观看 | 久久久久久国产精品无码下载 | 欧美丰满熟妇xxxx | 国产超级va在线观看视频 | 国产成人综合美国十次 | 亚洲日韩乱码中文无码蜜桃臀网站 | 未满小14洗澡无码视频网站 | 中文字幕无码人妻少妇免费 | 少妇人妻偷人精品无码视频 | 亚拍精品一区二区三区探花 | 欧美性猛交内射兽交老熟妇 | 欧美怡红院免费全部视频 | 国产农村妇女高潮大叫 | 久久99热只有频精品8 | 国产精品久久久一区二区三区 | 久久精品人人做人人综合 | 久久午夜夜伦鲁鲁片无码免费 | 国产国产精品人在线视 | 国产亚洲精品久久久闺蜜 | 欧美人与禽猛交狂配 | 曰韩无码二三区中文字幕 | 一本色道婷婷久久欧美 | 国产一区二区三区日韩精品 | 97无码免费人妻超级碰碰夜夜 | 鲁大师影院在线观看 | 中文亚洲成a人片在线观看 | 国产内射爽爽大片视频社区在线 | 国内精品久久久久久中文字幕 | 久久aⅴ免费观看 | 国产亚洲精品久久久久久久 | 精品久久久久香蕉网 | 夜夜高潮次次欢爽av女 | 国产内射爽爽大片视频社区在线 | 99久久亚洲精品无码毛片 | 日本高清一区免费中文视频 | 国产偷自视频区视频 | 欧美日韩在线亚洲综合国产人 | 中文字幕 人妻熟女 | 人人爽人人澡人人人妻 | 亚洲狠狠婷婷综合久久 | 国产人妻大战黑人第1集 | 中文字幕无码av波多野吉衣 | 永久免费精品精品永久-夜色 | 无码人中文字幕 | 午夜时刻免费入口 | 1000部夫妻午夜免费 | 99久久无码一区人妻 | 日日天日日夜日日摸 | 国产午夜亚洲精品不卡 | 最近中文2019字幕第二页 | 亚洲精品中文字幕久久久久 | 18黄暴禁片在线观看 | 成人亚洲精品久久久久软件 | 野外少妇愉情中文字幕 | 国产色xx群视频射精 | 亚洲精品久久久久久一区二区 | 国产香蕉尹人综合在线观看 | 久久久亚洲欧洲日产国码αv | 国产suv精品一区二区五 | 乱码午夜-极国产极内射 | 国产成人精品一区二区在线小狼 | 狠狠躁日日躁夜夜躁2020 | 日本一卡二卡不卡视频查询 | 亚洲另类伦春色综合小说 | 亚洲一区av无码专区在线观看 | 日本欧美一区二区三区乱码 | 国产精品对白交换视频 | 精品无码成人片一区二区98 | 性欧美疯狂xxxxbbbb | 无码精品人妻一区二区三区av | 国产九九九九九九九a片 | 日本xxxx色视频在线观看免费 | 久久天天躁夜夜躁狠狠 | 午夜精品一区二区三区在线观看 | 欧美黑人性暴力猛交喷水 | 夜精品a片一区二区三区无码白浆 | 国产无遮挡吃胸膜奶免费看 | 久久99热只有频精品8 | 亚洲成av人片在线观看无码不卡 | 欧美亚洲国产一区二区三区 | 成人免费视频视频在线观看 免费 | 国产两女互慰高潮视频在线观看 | 亚洲国产综合无码一区 | 精品无人国产偷自产在线 | 久久人人爽人人爽人人片av高清 | 少妇邻居内射在线 | 精品久久久无码人妻字幂 | 中文无码精品a∨在线观看不卡 | 婷婷色婷婷开心五月四房播播 | 好男人www社区 | 久久久久免费精品国产 | 好爽又高潮了毛片免费下载 | 国产高清不卡无码视频 | 久久久无码中文字幕久... | 国产一区二区不卡老阿姨 | 2020久久香蕉国产线看观看 | √天堂中文官网8在线 | 亚洲自偷自拍另类第1页 | 亚洲欧美国产精品久久 | 亚洲一区二区三区偷拍女厕 | 激情爆乳一区二区三区 | 国内少妇偷人精品视频 | 久激情内射婷内射蜜桃人妖 | 国产成人精品必看 | 呦交小u女精品视频 | 日韩少妇白浆无码系列 | 亚无码乱人伦一区二区 | 久久无码专区国产精品s | 日本精品少妇一区二区三区 | 大地资源网第二页免费观看 | 亚洲国产精品久久久天堂 | 初尝人妻少妇中文字幕 | 在线 国产 欧美 亚洲 天堂 | 图片区 小说区 区 亚洲五月 | 人妻尝试又大又粗久久 | 日本大香伊一区二区三区 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 97精品国产97久久久久久免费 | 精品亚洲成av人在线观看 | 中文精品久久久久人妻不卡 | 牲交欧美兽交欧美 | 精品国产一区二区三区av 性色 | 国产情侣作爱视频免费观看 | 色婷婷综合中文久久一本 | 亚洲精品一区国产 | 中文毛片无遮挡高清免费 | 国产欧美亚洲精品a | 国产精品毛片一区二区 | 巨爆乳无码视频在线观看 | 色五月丁香五月综合五月 | 成人欧美一区二区三区黑人免费 | 亚洲国产精品久久久天堂 | 久久精品中文字幕大胸 | 国产午夜手机精彩视频 | 国产手机在线αⅴ片无码观看 | 欧美老熟妇乱xxxxx | 亚洲男人av香蕉爽爽爽爽 | 久久综合给合久久狠狠狠97色 | 99久久婷婷国产综合精品青草免费 | 久久久www成人免费毛片 | 久久综合给久久狠狠97色 | 欧美性生交xxxxx久久久 | 国产特级毛片aaaaaa高潮流水 | 熟妇女人妻丰满少妇中文字幕 | 国产在线精品一区二区三区直播 | 欧美精品无码一区二区三区 | 无码人妻丰满熟妇区五十路百度 | 亚拍精品一区二区三区探花 | 在教室伦流澡到高潮hnp视频 | 精品少妇爆乳无码av无码专区 | 亚洲国产精品成人久久蜜臀 | 亚洲精品一区二区三区在线观看 | 欧美熟妇另类久久久久久多毛 | 强辱丰满人妻hd中文字幕 | 国产精品手机免费 | 国产人妻久久精品二区三区老狼 | 成人无码精品一区二区三区 | 欧美日韩一区二区综合 | 国产精品亚洲专区无码不卡 | 97夜夜澡人人爽人人喊中国片 | 中文无码伦av中文字幕 | 最近免费中文字幕中文高清百度 | 欧美乱妇无乱码大黄a片 | 亚洲国精产品一二二线 | 亚洲国产精品久久人人爱 | 久久久成人毛片无码 | 成人免费视频一区二区 | 久久国产精品二国产精品 | 亚洲性无码av中文字幕 | av人摸人人人澡人人超碰下载 | 日本熟妇人妻xxxxx人hd | 99精品无人区乱码1区2区3区 | 国产精品成人av在线观看 | 国内丰满熟女出轨videos | a在线亚洲男人的天堂 | 亚洲精品国产品国语在线观看 | 少妇久久久久久人妻无码 | 久精品国产欧美亚洲色aⅴ大片 | 四虎影视成人永久免费观看视频 | 国产成人无码午夜视频在线观看 | 亚洲aⅴ无码成人网站国产app | 捆绑白丝粉色jk震动捧喷白浆 | 男女超爽视频免费播放 | 欧美 丝袜 自拍 制服 另类 | 少妇邻居内射在线 | a片免费视频在线观看 | 亚洲精品国产第一综合99久久 | 狠狠cao日日穞夜夜穞av | 欧美zoozzooz性欧美 | 亚洲精品欧美二区三区中文字幕 | 97色伦图片97综合影院 | 狠狠噜狠狠狠狠丁香五月 | 欧美变态另类xxxx | 国产熟女一区二区三区四区五区 | 国产性生交xxxxx无码 | 国产极品视觉盛宴 | 人妻少妇精品无码专区二区 | 国产av无码专区亚洲awww | 美女张开腿让人桶 | 国内丰满熟女出轨videos | 学生妹亚洲一区二区 | 亚洲色欲久久久综合网东京热 | 色噜噜亚洲男人的天堂 | 亚洲精品美女久久久久久久 | 无码精品人妻一区二区三区av | 午夜精品久久久久久久 | 久久精品国产一区二区三区肥胖 | 久9re热视频这里只有精品 | 国产精品人妻一区二区三区四 | 亚洲精品中文字幕乱码 | 人人爽人人澡人人人妻 | 成在人线av无码免观看麻豆 | 日韩精品成人一区二区三区 | 无遮无挡爽爽免费视频 | 亚洲自偷自偷在线制服 | 欧美老妇与禽交 | 久久久av男人的天堂 | 国产无av码在线观看 | 国产人成高清在线视频99最全资源 | 99久久精品国产一区二区蜜芽 | 日韩av无码一区二区三区不卡 | 无码午夜成人1000部免费视频 | 久久精品国产一区二区三区肥胖 | 97人妻精品一区二区三区 | a在线观看免费网站大全 | 久久久亚洲欧洲日产国码αv | 久久亚洲a片com人成 | 无码毛片视频一区二区本码 | 久久久久久av无码免费看大片 | 成人精品天堂一区二区三区 | 国内精品久久久久久中文字幕 | 中文字幕无码免费久久99 | 日本欧美一区二区三区乱码 | 又黄又爽又色的视频 | 特黄特色大片免费播放器图片 | 色婷婷综合激情综在线播放 | 在线观看国产午夜福利片 | 国产乱人伦av在线无码 | 亚洲狠狠色丁香婷婷综合 | 国产一区二区三区日韩精品 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产亚av手机在线观看 | 日日碰狠狠丁香久燥 | 国产av久久久久精东av | 亚洲乱码日产精品bd | 国产精品久久久午夜夜伦鲁鲁 | 东京无码熟妇人妻av在线网址 | 又紧又大又爽精品一区二区 | 亚洲一区av无码专区在线观看 | 国产口爆吞精在线视频 | 曰本女人与公拘交酡免费视频 | 国内精品九九久久久精品 | 自拍偷自拍亚洲精品被多人伦好爽 | 国精产品一区二区三区 | 久久精品女人天堂av免费观看 | 精品一区二区三区无码免费视频 | 蜜桃无码一区二区三区 | 97久久超碰中文字幕 | 国产乱码精品一品二品 | 亚洲熟悉妇女xxx妇女av | 久久精品国产一区二区三区肥胖 | 免费观看又污又黄的网站 | av无码久久久久不卡免费网站 | 欧洲欧美人成视频在线 | 中文无码成人免费视频在线观看 | 香港三级日本三级妇三级 | 久久精品一区二区三区四区 | 无码av中文字幕免费放 | 亚洲第一网站男人都懂 | 无套内谢的新婚少妇国语播放 | 伊在人天堂亚洲香蕉精品区 | 东京热无码av男人的天堂 | 国产莉萝无码av在线播放 | 天天拍夜夜添久久精品 | 国产极品视觉盛宴 | √天堂中文官网8在线 | 成人试看120秒体验区 | 国产香蕉尹人综合在线观看 | 日韩av无码一区二区三区 | 嫩b人妻精品一区二区三区 | 国产精品99久久精品爆乳 | 久久久成人毛片无码 | 激情综合激情五月俺也去 | 成人无码精品1区2区3区免费看 | 青青草原综合久久大伊人精品 | 18无码粉嫩小泬无套在线观看 | 在线观看国产一区二区三区 | 红桃av一区二区三区在线无码av | 狠狠亚洲超碰狼人久久 | 夜夜躁日日躁狠狠久久av | 青春草在线视频免费观看 | 久久久久免费精品国产 | 学生妹亚洲一区二区 | 天干天干啦夜天干天2017 | 一本久久a久久精品亚洲 | 国产绳艺sm调教室论坛 | 无码免费一区二区三区 | 国产精品无码一区二区桃花视频 | 中文字幕人妻丝袜二区 | 一个人免费观看的www视频 | 精品成人av一区二区三区 | 日日橹狠狠爱欧美视频 | 好屌草这里只有精品 | 精品国产aⅴ无码一区二区 | 成人免费无码大片a毛片 | 88国产精品欧美一区二区三区 | 国产精品内射视频免费 | 久久久精品成人免费观看 | 欧美三级a做爰在线观看 | 国产精品.xx视频.xxtv | 国产成人av免费观看 | 永久免费观看国产裸体美女 | 国产亚洲欧美在线专区 | 日本www一道久久久免费榴莲 | 全球成人中文在线 | 性生交大片免费看女人按摩摩 | 亚洲日韩中文字幕在线播放 | 日本护士毛茸茸高潮 | 动漫av一区二区在线观看 | 日韩精品成人一区二区三区 | 国产美女精品一区二区三区 | 日本大香伊一区二区三区 | 久久久久成人精品免费播放动漫 | 丰满少妇高潮惨叫视频 | 丝袜人妻一区二区三区 | 亚洲国产一区二区三区在线观看 | 亚洲人交乣女bbw | av无码电影一区二区三区 | 中文亚洲成a人片在线观看 | 中文字幕无码av波多野吉衣 | 一二三四在线观看免费视频 | 国产成人无码a区在线观看视频app | 欧美兽交xxxx×视频 | 永久黄网站色视频免费直播 | 免费网站看v片在线18禁无码 | 成人精品视频一区二区三区尤物 | 久久国语露脸国产精品电影 | 少女韩国电视剧在线观看完整 | 无码人妻丰满熟妇区毛片18 | 国产区女主播在线观看 | 乱人伦人妻中文字幕无码 | 亚洲狠狠婷婷综合久久 | 黑人粗大猛烈进出高潮视频 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产麻豆精品一区二区三区v视界 | 精品国偷自产在线 | 草草网站影院白丝内射 | 国产精品嫩草久久久久 | 国产乱码精品一品二品 | 中文字幕av无码一区二区三区电影 | 99久久99久久免费精品蜜桃 | 日本高清一区免费中文视频 | 日本免费一区二区三区最新 | 久久人妻内射无码一区三区 | 激情内射亚州一区二区三区爱妻 | 两性色午夜免费视频 | 国产精品人人妻人人爽 | 中文字幕人妻丝袜二区 | 特大黑人娇小亚洲女 | √8天堂资源地址中文在线 | 精品无人国产偷自产在线 | 红桃av一区二区三区在线无码av | 天天拍夜夜添久久精品 | 国产乡下妇女做爰 | 激情综合激情五月俺也去 | 伦伦影院午夜理论片 | 欧美精品在线观看 | 夜精品a片一区二区三区无码白浆 | 亚洲阿v天堂在线 | 久久久av男人的天堂 | 性生交大片免费看女人按摩摩 | 狠狠色噜噜狠狠狠7777奇米 | 国产疯狂伦交大片 | 亚洲国产精品毛片av不卡在线 | 熟妇人妻无码xxx视频 | 中文字幕无码av激情不卡 | 97资源共享在线视频 | 在线观看国产一区二区三区 | 曰韩少妇内射免费播放 | 久久久久成人片免费观看蜜芽 | 东京热无码av男人的天堂 | 亚洲 日韩 欧美 成人 在线观看 | 日日天干夜夜狠狠爱 | 无码人中文字幕 | 内射后入在线观看一区 | 午夜无码区在线观看 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 97资源共享在线视频 | 亚洲熟悉妇女xxx妇女av | 日韩无码专区 | 日本爽爽爽爽爽爽在线观看免 | 狠狠色丁香久久婷婷综合五月 | 亚洲自偷精品视频自拍 | 国产av无码专区亚洲a∨毛片 | 婷婷五月综合激情中文字幕 | 亚洲日本va中文字幕 | 无码人妻丰满熟妇区五十路百度 | 亚洲熟悉妇女xxx妇女av | 毛片内射-百度 | 一本久道久久综合狠狠爱 | 日韩无码专区 | 久久综合香蕉国产蜜臀av | 国产成人精品视频ⅴa片软件竹菊 | 国产乱人伦av在线无码 | 亚洲а∨天堂久久精品2021 | 亚洲 另类 在线 欧美 制服 | 少妇厨房愉情理9仑片视频 | 中文字幕乱码亚洲无线三区 | 人人澡人摸人人添 | 中文字幕久久久久人妻 | 国产内射老熟女aaaa | 成人女人看片免费视频放人 | 亚洲人成网站色7799 | 乱人伦中文视频在线观看 | 亚洲精品成a人在线观看 | 自拍偷自拍亚洲精品10p | 中文字幕无码视频专区 | 亚洲一区av无码专区在线观看 | 成人无码视频在线观看网站 | 久久99精品久久久久久 | 免费人成网站视频在线观看 | 国产人妻精品一区二区三区不卡 | 亚洲精品成人av在线 | 国产精品a成v人在线播放 | 中文无码精品a∨在线观看不卡 | 国产精品亚洲一区二区三区喷水 | 亚洲国产日韩a在线播放 | 国产成人人人97超碰超爽8 | 亚洲一区二区三区四区 | 亚洲日韩av一区二区三区四区 | 日韩成人一区二区三区在线观看 | 中文字幕精品av一区二区五区 | 一本色道婷婷久久欧美 | 国产在热线精品视频 | 欧洲欧美人成视频在线 | 麻豆国产丝袜白领秘书在线观看 | 中文亚洲成a人片在线观看 | 亚洲国产欧美国产综合一区 | 亚洲人成人无码网www国产 | 中文字幕av日韩精品一区二区 | 在教室伦流澡到高潮hnp视频 | 久久国产精品萌白酱免费 | 国产精品亚洲а∨无码播放麻豆 | 丰满肥臀大屁股熟妇激情视频 | 欧美丰满少妇xxxx性 | 国内精品一区二区三区不卡 | av无码电影一区二区三区 | 性色欲情网站iwww九文堂 | 永久黄网站色视频免费直播 | 国产疯狂伦交大片 | 青青草原综合久久大伊人精品 | aa片在线观看视频在线播放 | 人人澡人人透人人爽 | 国语自产偷拍精品视频偷 | 真人与拘做受免费视频一 | 狠狠色丁香久久婷婷综合五月 | 国产综合久久久久鬼色 | 少妇激情av一区二区 | 又粗又大又硬又长又爽 | 欧美 日韩 亚洲 在线 | 久久久久久国产精品无码下载 | 亚洲国产成人a精品不卡在线 | 永久黄网站色视频免费直播 | 欧美丰满熟妇xxxx性ppx人交 | 又粗又大又硬毛片免费看 | 好男人www社区 | 色综合久久久无码网中文 | 国产无av码在线观看 | 亚洲娇小与黑人巨大交 | 国产av一区二区精品久久凹凸 | 天天拍夜夜添久久精品 | 一本久道久久综合狠狠爱 | 人妻少妇精品视频专区 | 无码成人精品区在线观看 | 国内精品久久久久久中文字幕 | 丰满少妇女裸体bbw | 国产精品久久久久久亚洲影视内衣 | 亚洲第一网站男人都懂 | 极品尤物被啪到呻吟喷水 | 天天av天天av天天透 | 亚洲欧美国产精品专区久久 | 99re在线播放 | 久久午夜夜伦鲁鲁片无码免费 | 国产99久久精品一区二区 | 人妻有码中文字幕在线 | 欧美放荡的少妇 | 影音先锋中文字幕无码 | 玩弄人妻少妇500系列视频 | 亚洲一区二区三区国产精华液 | 无码成人精品区在线观看 | 亚洲成色www久久网站 | 精品久久久无码中文字幕 | 国产综合在线观看 | 国产亚洲tv在线观看 | 青青久在线视频免费观看 | 国产香蕉尹人综合在线观看 | 亚洲一区二区三区偷拍女厕 | 在线 国产 欧美 亚洲 天堂 | 精品久久久久香蕉网 | 娇妻被黑人粗大高潮白浆 | 欧美猛少妇色xxxxx | 97无码免费人妻超级碰碰夜夜 | 天天拍夜夜添久久精品大 | 熟妇人妻激情偷爽文 | 国产片av国语在线观看 | 亚洲va欧美va天堂v国产综合 | 久久久精品成人免费观看 | 色综合久久久久综合一本到桃花网 | 国产亚洲精品久久久ai换 | 欧美肥老太牲交大战 | 日韩无码专区 | 国产亚洲精品久久久闺蜜 | 久久亚洲精品中文字幕无男同 | 亚洲码国产精品高潮在线 | 国产精品亚洲五月天高清 | 日韩av无码一区二区三区 | 国产高清不卡无码视频 | 亚洲精品久久久久avwww潮水 | 玩弄少妇高潮ⅹxxxyw | 曰本女人与公拘交酡免费视频 | 国产真实夫妇视频 | 狠狠噜狠狠狠狠丁香五月 | 亚洲日韩中文字幕在线播放 | 欧美国产亚洲日韩在线二区 | 久久人人爽人人爽人人片ⅴ | 久久精品人妻少妇一区二区三区 | 日本免费一区二区三区最新 | 无码人妻av免费一区二区三区 | 日日天日日夜日日摸 | 一本一道久久综合久久 | 国产国产精品人在线视 | 人妻少妇精品无码专区二区 | 欧美高清在线精品一区 | 日本饥渴人妻欲求不满 | 99精品视频在线观看免费 | 日本丰满护士爆乳xxxx | 大色综合色综合网站 | 日韩人妻少妇一区二区三区 | 国产av一区二区三区最新精品 | 东京热无码av男人的天堂 | 国语自产偷拍精品视频偷 | 久久精品国产大片免费观看 | 欧美日韩一区二区综合 | 扒开双腿疯狂进出爽爽爽视频 | 国产午夜视频在线观看 | 日韩精品成人一区二区三区 | 精品夜夜澡人妻无码av蜜桃 | 又紧又大又爽精品一区二区 | 国产一精品一av一免费 | 欧美zoozzooz性欧美 | 成人影院yy111111在线观看 | 乌克兰少妇性做爰 | 亚洲一区二区三区无码久久 | 四虎4hu永久免费 | 亚洲a无码综合a国产av中文 | 国产在线无码精品电影网 | 亚洲国产精品美女久久久久 | 国产一精品一av一免费 | 国产精品沙发午睡系列 | 国产国产精品人在线视 | 欧美国产亚洲日韩在线二区 | 嫩b人妻精品一区二区三区 | 色婷婷综合激情综在线播放 | 久久亚洲精品成人无码 | 亚洲中文字幕乱码av波多ji | 亚洲日本va午夜在线电影 | 一二三四在线观看免费视频 | 疯狂三人交性欧美 | 好屌草这里只有精品 | 人妻与老人中文字幕 | 国产精品久久久久久久影院 | 伊在人天堂亚洲香蕉精品区 | 成年美女黄网站色大免费全看 | 未满成年国产在线观看 | 欧美成人家庭影院 | 亚洲精品无码人妻无码 | 精品无码一区二区三区的天堂 | 成人影院yy111111在线观看 | 免费无码的av片在线观看 | 精品国产麻豆免费人成网站 | 国产精品对白交换视频 | 亚洲s码欧洲m码国产av | 曰本女人与公拘交酡免费视频 | 亚洲精品一区国产 | 无码纯肉视频在线观看 | 特黄特色大片免费播放器图片 | 亚洲中文字幕久久无码 | 99久久人妻精品免费二区 | 乱码av麻豆丝袜熟女系列 | 国产熟女一区二区三区四区五区 | 亚拍精品一区二区三区探花 | 国产欧美亚洲精品a | 高清无码午夜福利视频 | 大乳丰满人妻中文字幕日本 | 亚洲色无码一区二区三区 | 俺去俺来也www色官网 | 中文无码成人免费视频在线观看 | 久久无码专区国产精品s | 成年女人永久免费看片 | 麻豆果冻传媒2021精品传媒一区下载 | 日韩人妻无码一区二区三区久久99 | 亚洲国产一区二区三区在线观看 | 久久精品丝袜高跟鞋 | 国产极品视觉盛宴 | 色偷偷人人澡人人爽人人模 | 香港三级日本三级妇三级 | 激情内射日本一区二区三区 | 国产精品va在线观看无码 | 装睡被陌生人摸出水好爽 | 亚洲色欲久久久综合网东京热 | 久久综合狠狠综合久久综合88 | 日本又色又爽又黄的a片18禁 | 国产一区二区三区影院 | 日本精品久久久久中文字幕 | 欧美精品免费观看二区 | 无码人妻av免费一区二区三区 | 九月婷婷人人澡人人添人人爽 | 国内精品一区二区三区不卡 | 亲嘴扒胸摸屁股激烈网站 | 妺妺窝人体色www在线小说 | 小sao货水好多真紧h无码视频 | 老头边吃奶边弄进去呻吟 | 动漫av一区二区在线观看 | 国产成人精品无码播放 | 国产av一区二区三区最新精品 | 精品无码国产自产拍在线观看蜜 | 欧美变态另类xxxx | 人妻体内射精一区二区三四 | 国产精品亚洲а∨无码播放麻豆 | 亚洲精品美女久久久久久久 | 无码国产激情在线观看 | 国产无遮挡吃胸膜奶免费看 | 国产一区二区三区四区五区加勒比 | 欧美大屁股xxxxhd黑色 | 亚洲七七久久桃花影院 | 永久免费观看国产裸体美女 | 亚洲成av人综合在线观看 | 国产成人无码区免费内射一片色欲 | 乱码av麻豆丝袜熟女系列 | 亚洲综合伊人久久大杳蕉 | 久久国产精品_国产精品 | 亚洲a无码综合a国产av中文 | 99久久婷婷国产综合精品青草免费 | 欧美黑人巨大xxxxx | 中文无码伦av中文字幕 | 天天摸天天碰天天添 | 精品国产乱码久久久久乱码 | 中文字幕日产无线码一区 | 久久久久久九九精品久 | 色婷婷久久一区二区三区麻豆 | 无码国产乱人伦偷精品视频 | 久久精品国产一区二区三区肥胖 | 成人毛片一区二区 | 亚洲第一网站男人都懂 | 麻豆蜜桃av蜜臀av色欲av | 国产精品久久久久久亚洲毛片 | 日韩精品一区二区av在线 | 久9re热视频这里只有精品 | 久久人人97超碰a片精品 | 亚洲精品久久久久久久久久久 | 成人一区二区免费视频 | 亚洲成在人网站无码天堂 | 久久国产精品偷任你爽任你 | 天天综合网天天综合色 | 啦啦啦www在线观看免费视频 | 青草青草久热国产精品 | 鲁一鲁av2019在线 | 日韩精品乱码av一区二区 | 性色欲网站人妻丰满中文久久不卡 | 日韩精品无码一区二区中文字幕 | 色综合视频一区二区三区 | 在线天堂新版最新版在线8 | 爽爽影院免费观看 | 久久国产自偷自偷免费一区调 | 偷窥村妇洗澡毛毛多 | 欧美激情综合亚洲一二区 | 曰本女人与公拘交酡免费视频 | 久久天天躁夜夜躁狠狠 | 国产熟女一区二区三区四区五区 | 亚洲小说图区综合在线 | 亚洲国产精品久久人人爱 | 精品无码一区二区三区的天堂 | 精品人妻中文字幕有码在线 | 亚洲精品午夜国产va久久成人 | 日韩人妻无码一区二区三区久久99 | 色五月五月丁香亚洲综合网 | 狠狠色丁香久久婷婷综合五月 | 精品乱子伦一区二区三区 | 丝袜 中出 制服 人妻 美腿 | 国产成人无码av在线影院 | aⅴ亚洲 日韩 色 图网站 播放 | 少妇性l交大片欧洲热妇乱xxx | 男女下面进入的视频免费午夜 | 又大又硬又黄的免费视频 | 一本久道久久综合狠狠爱 | 色综合久久中文娱乐网 | 成人欧美一区二区三区黑人 | 丰满少妇高潮惨叫视频 | 少妇无码av无码专区在线观看 | 伊人久久大香线蕉午夜 | 日本大香伊一区二区三区 | 国产在线精品一区二区高清不卡 | 国产精品久久久久久亚洲毛片 | 爱做久久久久久 | 牲交欧美兽交欧美 | 久久久久国色av免费观看性色 | 国产成人精品必看 | 中文字幕精品av一区二区五区 | 激情综合激情五月俺也去 | 性欧美牲交xxxxx视频 | 粉嫩少妇内射浓精videos | 扒开双腿吃奶呻吟做受视频 | 国产色精品久久人妻 | 一区二区传媒有限公司 | 国产成人精品无码播放 | 大乳丰满人妻中文字幕日本 | 鲁鲁鲁爽爽爽在线视频观看 | 99久久久无码国产aaa精品 | av在线亚洲欧洲日产一区二区 | 久久精品中文字幕一区 | 国产成人无码av片在线观看不卡 | 亚洲欧美日韩国产精品一区二区 | 中文无码伦av中文字幕 | 97久久精品无码一区二区 | 动漫av一区二区在线观看 | 国产麻豆精品一区二区三区v视界 | 鲁一鲁av2019在线 | a在线亚洲男人的天堂 | 国产亚洲精品久久久久久大师 | 国产性生大片免费观看性 | 欧美日本精品一区二区三区 | 久久国产精品二国产精品 | 国产乱人无码伦av在线a | 熟妇女人妻丰满少妇中文字幕 | 自拍偷自拍亚洲精品10p | 国产精品嫩草久久久久 | 97se亚洲精品一区 | 久久99精品久久久久婷婷 | 性开放的女人aaa片 | 亚洲天堂2017无码中文 | 色婷婷av一区二区三区之红樱桃 | 人妻aⅴ无码一区二区三区 | 国产精品成人av在线观看 | 无码人妻av免费一区二区三区 | 亚洲区欧美区综合区自拍区 | 亚洲理论电影在线观看 | 免费观看激色视频网站 | 欧美日韩综合一区二区三区 | 超碰97人人射妻 | 一本久道久久综合狠狠爱 | 国产高潮视频在线观看 | 狠狠cao日日穞夜夜穞av | aⅴ亚洲 日韩 色 图网站 播放 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲无人区午夜福利码高清完整版 | 九九在线中文字幕无码 | 九九综合va免费看 | 免费人成在线观看网站 | 亚洲精品中文字幕久久久久 | 国产精品va在线观看无码 | 中文字幕乱码亚洲无线三区 | 欧美午夜特黄aaaaaa片 | 亚洲精品一区三区三区在线观看 | 国模大胆一区二区三区 | 亚洲精品国产品国语在线观看 | 国产香蕉尹人视频在线 | 一本久道久久综合狠狠爱 | 欧美亚洲日韩国产人成在线播放 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 成人一区二区免费视频 | 亚洲中文字幕无码中字 | 日韩欧美中文字幕在线三区 | 福利一区二区三区视频在线观看 | 精品厕所偷拍各类美女tp嘘嘘 | 日日干夜夜干 | 国产精品美女久久久久av爽李琼 | 久9re热视频这里只有精品 | 日日橹狠狠爱欧美视频 | 久激情内射婷内射蜜桃人妖 | 97久久超碰中文字幕 | 波多野结衣av一区二区全免费观看 | 欧美xxxx黑人又粗又长 | 超碰97人人做人人爱少妇 | 免费无码的av片在线观看 | 免费观看的无遮挡av | 久激情内射婷内射蜜桃人妖 | 丝袜美腿亚洲一区二区 | 国产成人精品无码播放 | 高清无码午夜福利视频 | 色一情一乱一伦一视频免费看 | 爆乳一区二区三区无码 | 在线看片无码永久免费视频 | 色情久久久av熟女人妻网站 | 国产精品亚洲а∨无码播放麻豆 | 又粗又大又硬又长又爽 | 欧美黑人乱大交 | 7777奇米四色成人眼影 | 亚洲国产精品久久久久久 | 国产精品高潮呻吟av久久4虎 | 国产亚洲日韩欧美另类第八页 | 精品午夜福利在线观看 | 成 人 网 站国产免费观看 | 东北女人啪啪对白 | 人妻夜夜爽天天爽三区 | 99久久99久久免费精品蜜桃 | 欧美 丝袜 自拍 制服 另类 | 欧美激情内射喷水高潮 | 色窝窝无码一区二区三区色欲 | 国产精品99久久精品爆乳 | 亚洲啪av永久无码精品放毛片 | 国产色精品久久人妻 | 中文字幕无码人妻少妇免费 | 丰满人妻翻云覆雨呻吟视频 | 色 综合 欧美 亚洲 国产 | 精品无码成人片一区二区98 | 内射爽无广熟女亚洲 | 蜜桃视频插满18在线观看 | 青青久在线视频免费观看 | 亚洲欧洲中文日韩av乱码 | 国产小呦泬泬99精品 | 亚洲欧美国产精品久久 | 免费国产成人高清在线观看网站 | 性生交大片免费看l | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产亚洲精品久久久闺蜜 | 日本一本二本三区免费 | 宝宝好涨水快流出来免费视频 | 国产午夜无码视频在线观看 | 天下第一社区视频www日本 | 日韩精品成人一区二区三区 | 成 人影片 免费观看 | 久久精品女人天堂av免费观看 | 国精品人妻无码一区二区三区蜜柚 | 国产亚洲精品久久久久久 | 欧美国产亚洲日韩在线二区 | 亚洲精品无码国产 | 国产精品香蕉在线观看 | 欧美人与禽猛交狂配 | 亚洲精品国产精品乱码不卡 | 亚洲精品一区二区三区在线 | 乱码av麻豆丝袜熟女系列 | 亚洲精品国产精品乱码不卡 | 宝宝好涨水快流出来免费视频 | 装睡被陌生人摸出水好爽 | 久久 国产 尿 小便 嘘嘘 | 成 人 免费观看网站 | 丰满少妇人妻久久久久久 | 色妞www精品免费视频 | 少妇性荡欲午夜性开放视频剧场 | 中文字幕日产无线码一区 | 国产莉萝无码av在线播放 | 亚洲精品午夜国产va久久成人 | 欧美日韩一区二区免费视频 | 丰满人妻被黑人猛烈进入 | 国产高清不卡无码视频 | 国产尤物精品视频 | 国产精品久久久久9999小说 | 久久精品中文字幕大胸 | 精品国产一区二区三区四区 | 国产又粗又硬又大爽黄老大爷视 | 亚洲人成网站在线播放942 | 人人妻人人澡人人爽人人精品 | 亚洲国产精品久久久久久 | 国产午夜精品一区二区三区嫩草 | 中文字幕乱码亚洲无线三区 | 欧美一区二区三区 | 日本饥渴人妻欲求不满 | 久久久久久久久888 | 日韩精品一区二区av在线 | 露脸叫床粗话东北少妇 | 5858s亚洲色大成网站www | 人妻无码久久精品人妻 | 天下第一社区视频www日本 | 亚洲精品国产第一综合99久久 | 国产97人人超碰caoprom | 又黄又爽又色的视频 | 国产乱人伦av在线无码 | 国产绳艺sm调教室论坛 | 极品嫩模高潮叫床 | 久久久久免费看成人影片 | 国产精品亚洲五月天高清 | 亚洲另类伦春色综合小说 | 亚欧洲精品在线视频免费观看 | 图片小说视频一区二区 | 超碰97人人做人人爱少妇 | 亚洲人成网站在线播放942 | 国产高潮视频在线观看 | 俄罗斯老熟妇色xxxx | 久久精品丝袜高跟鞋 | 国模大胆一区二区三区 | 九九久久精品国产免费看小说 | 波多野结衣高清一区二区三区 | 伦伦影院午夜理论片 | 日韩亚洲欧美中文高清在线 | 亚洲欧洲日本综合aⅴ在线 | 午夜精品一区二区三区在线观看 | 午夜精品久久久久久久久 | 67194成是人免费无码 | 国产熟妇高潮叫床视频播放 | 久久伊人色av天堂九九小黄鸭 | 日本精品少妇一区二区三区 | 国产麻豆精品精东影业av网站 | 久久成人a毛片免费观看网站 | 亚洲自偷精品视频自拍 | 日本精品久久久久中文字幕 | 国产成人一区二区三区在线观看 | 国产97在线 | 亚洲 | 女人被男人爽到呻吟的视频 | 精品人妻人人做人人爽 | 99久久精品日本一区二区免费 | 亚洲中文字幕无码中文字在线 | 亚洲精品国产第一综合99久久 | 大肉大捧一进一出视频出来呀 | 麻豆精品国产精华精华液好用吗 | 伊人久久大香线蕉午夜 | 日本一卡2卡3卡四卡精品网站 | 在线播放免费人成毛片乱码 | 国产va免费精品观看 | 国语精品一区二区三区 | 一本色道久久综合亚洲精品不卡 | 欧洲欧美人成视频在线 | 亚洲 激情 小说 另类 欧美 | 任你躁在线精品免费 | 久久精品人人做人人综合试看 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲中文字幕在线观看 | 日本www一道久久久免费榴莲 | 一区二区传媒有限公司 | 98国产精品综合一区二区三区 | 欧美乱妇无乱码大黄a片 | 欧美人与动性行为视频 | 国产人妻人伦精品1国产丝袜 | 一本久道久久综合狠狠爱 | 久久亚洲精品中文字幕无男同 | 无码国产乱人伦偷精品视频 | 色一情一乱一伦一区二区三欧美 | 亚洲精品一区国产 | 亚洲呦女专区 | 中文字幕无码av激情不卡 | 久久久成人毛片无码 | 欧美亚洲国产一区二区三区 | 亚洲欧美日韩国产精品一区二区 | 国产精品沙发午睡系列 | a片免费视频在线观看 | 国产精品久久久久久久9999 | 亚洲色欲色欲欲www在线 | 欧美人与动性行为视频 | 97无码免费人妻超级碰碰夜夜 | 亚洲熟妇色xxxxx欧美老妇y | 久久zyz资源站无码中文动漫 | 久久久国产精品无码免费专区 | 色综合久久久无码中文字幕 | 全黄性性激高免费视频 | 99久久人妻精品免费二区 | 色妞www精品免费视频 | 亚洲精品一区二区三区在线观看 | 久久久精品成人免费观看 | 免费国产黄网站在线观看 | 俺去俺来也www色官网 | 4hu四虎永久在线观看 | 人人爽人人澡人人高潮 | 国产一区二区三区精品视频 | 人人妻人人藻人人爽欧美一区 | 欧美丰满少妇xxxx性 | 色综合久久久久综合一本到桃花网 | 国产xxx69麻豆国语对白 | 天天拍夜夜添久久精品 | 大乳丰满人妻中文字幕日本 | 国产激情无码一区二区 | 老头边吃奶边弄进去呻吟 | 精品无码av一区二区三区 | 伊在人天堂亚洲香蕉精品区 | 色一情一乱一伦一区二区三欧美 | 无码人妻久久一区二区三区不卡 | 亚洲の无码国产の无码影院 | 内射后入在线观看一区 | 帮老师解开蕾丝奶罩吸乳网站 | 国产精品第一国产精品 | 色综合久久网 | 无码免费一区二区三区 | 久久五月精品中文字幕 | 大乳丰满人妻中文字幕日本 | 曰韩少妇内射免费播放 | 亚洲爆乳大丰满无码专区 | 国内精品人妻无码久久久影院 | 欧美人与善在线com | 无套内射视频囯产 | 亚洲国产精品一区二区美利坚 | 欧美丰满少妇xxxx性 | 国产av无码专区亚洲awww | 乌克兰少妇性做爰 | 性做久久久久久久久 | 亚洲а∨天堂久久精品2021 | 精品无码一区二区三区的天堂 | 欧美变态另类xxxx | 性生交片免费无码看人 | 亚洲一区二区三区在线观看网站 | 国产av一区二区精品久久凹凸 | 人人爽人人澡人人人妻 | 色噜噜亚洲男人的天堂 | 欧美丰满熟妇xxxx性ppx人交 | 国产精品自产拍在线观看 | www国产亚洲精品久久久日本 | 免费播放一区二区三区 | 亚洲一区二区三区在线观看网站 | 狠狠色丁香久久婷婷综合五月 | 秋霞特色aa大片 | 国产免费观看黄av片 | 人妻人人添人妻人人爱 | 国产超碰人人爽人人做人人添 | 大屁股大乳丰满人妻 | 亚洲s码欧洲m码国产av | 无码人妻少妇伦在线电影 | 极品嫩模高潮叫床 | 欧美精品一区二区精品久久 | 成人女人看片免费视频放人 | 欧美喷潮久久久xxxxx | 亚洲色欲久久久综合网东京热 | 国产精品久久久久久久影院 | 成人无码影片精品久久久 | 久久人人爽人人爽人人片ⅴ | 午夜精品一区二区三区在线观看 | 大胆欧美熟妇xx | 人妻少妇精品无码专区二区 | 激情内射亚州一区二区三区爱妻 | 牲欲强的熟妇农村老妇女 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲爆乳无码专区 | 亚洲欧美国产精品专区久久 | 欧美老妇交乱视频在线观看 | 国产精品无码一区二区桃花视频 | 亚洲精品欧美二区三区中文字幕 | 国产又粗又硬又大爽黄老大爷视 | 亚洲s码欧洲m码国产av | 国产精品多人p群无码 | 国产莉萝无码av在线播放 | 窝窝午夜理论片影院 | 国产精品爱久久久久久久 | 亚洲精品久久久久中文第一幕 | 国产极品美女高潮无套在线观看 | 色偷偷人人澡人人爽人人模 | 丝袜 中出 制服 人妻 美腿 | 国产av无码专区亚洲a∨毛片 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久精品人妻少妇一区二区三区 | 131美女爱做视频 | 男女作爱免费网站 | 国产精品内射视频免费 | 少妇的肉体aa片免费 | 牛和人交xxxx欧美 | 色综合视频一区二区三区 | 久久99精品久久久久婷婷 | 日韩精品无码一本二本三本色 | 牲交欧美兽交欧美 | 亚洲爆乳无码专区 | 99er热精品视频 | 国产偷国产偷精品高清尤物 | 色婷婷欧美在线播放内射 | 亚洲中文字幕av在天堂 | 精品无码成人片一区二区98 | 色一情一乱一伦一区二区三欧美 | 亚洲成av人片天堂网无码】 | 伊人久久大香线焦av综合影院 | 青青青爽视频在线观看 | 国产成人精品一区二区在线小狼 | 日韩精品无码免费一区二区三区 | 欧美性猛交xxxx富婆 | 一本无码人妻在中文字幕免费 | 国产成人亚洲综合无码 | 黑人大群体交免费视频 | 成人性做爰aaa片免费看 | 六十路熟妇乱子伦 | 亚洲 日韩 欧美 成人 在线观看 | 欧美人与禽猛交狂配 | 成人精品视频一区二区 | 牲欲强的熟妇农村老妇女视频 | 熟女俱乐部五十路六十路av | 99国产欧美久久久精品 | 激情内射日本一区二区三区 | 欧美人妻一区二区三区 | 又大又紧又粉嫩18p少妇 | 人妻体内射精一区二区三四 | 东京热无码av男人的天堂 | 国产成人午夜福利在线播放 | 蜜臀av无码人妻精品 | 老太婆性杂交欧美肥老太 | av无码不卡在线观看免费 | 亚洲国产欧美在线成人 | 国产激情艳情在线看视频 | 亚洲中文字幕在线观看 | 国内少妇偷人精品视频免费 | 久久伊人色av天堂九九小黄鸭 | 乱人伦中文视频在线观看 | 奇米影视888欧美在线观看 | www国产亚洲精品久久久日本 | 熟妇人妻无码xxx视频 | 丁香花在线影院观看在线播放 | 日本高清一区免费中文视频 | 国产内射爽爽大片视频社区在线 | 免费视频欧美无人区码 | 久久国产精品精品国产色婷婷 | 亚洲精品综合五月久久小说 | 99久久亚洲精品无码毛片 | 亚洲の无码国产の无码步美 | 欧美成人免费全部网站 | 欧洲vodafone精品性 | 自拍偷自拍亚洲精品被多人伦好爽 | 夜先锋av资源网站 | 日日天日日夜日日摸 | 国产免费无码一区二区视频 | 成人精品一区二区三区中文字幕 | 亚洲精品久久久久avwww潮水 | 久久www免费人成人片 | 全黄性性激高免费视频 | 亚洲精品中文字幕乱码 | 老头边吃奶边弄进去呻吟 | 在线看片无码永久免费视频 | 成人无码视频在线观看网站 | 国产特级毛片aaaaaa高潮流水 | 日日躁夜夜躁狠狠躁 | 国产激情综合五月久久 | 国产亚洲日韩欧美另类第八页 | 亚洲成色在线综合网站 | 亚洲中文字幕在线无码一区二区 | 国产69精品久久久久app下载 | 在线成人www免费观看视频 | 婷婷丁香五月天综合东京热 | 成人aaa片一区国产精品 | 狂野欧美性猛交免费视频 | 亚洲人成网站色7799 | 激情亚洲一区国产精品 | 亚洲人亚洲人成电影网站色 | 日本丰满熟妇videos | 中文精品无码中文字幕无码专区 | 自拍偷自拍亚洲精品10p | 激情国产av做激情国产爱 | 欧美日韩色另类综合 | 中文字幕无线码 | 午夜性刺激在线视频免费 | 欧美阿v高清资源不卡在线播放 | 亚洲国产欧美日韩精品一区二区三区 | 伊人久久大香线焦av综合影院 | 无套内谢的新婚少妇国语播放 | 久久久久久九九精品久 | av无码久久久久不卡免费网站 | 好爽又高潮了毛片免费下载 | 99久久久无码国产精品免费 | 国产区女主播在线观看 | 3d动漫精品啪啪一区二区中 | 国产肉丝袜在线观看 | 国产麻豆精品精东影业av网站 | 日韩精品无码一区二区中文字幕 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产精品理论片在线观看 | 久久亚洲a片com人成 | 老太婆性杂交欧美肥老太 | 初尝人妻少妇中文字幕 | 无套内谢的新婚少妇国语播放 | 久久综合久久自在自线精品自 | 久久久久久亚洲精品a片成人 | 国产97色在线 | 免 | 久久综合给合久久狠狠狠97色 | 性啪啪chinese东北女人 | 国产免费久久久久久无码 | 大地资源中文第3页 | 精品无人区无码乱码毛片国产 | 久久综合给久久狠狠97色 | 久久久久久久人妻无码中文字幕爆 | 兔费看少妇性l交大片免费 | 国产成人av免费观看 | 扒开双腿疯狂进出爽爽爽视频 | 日本精品人妻无码77777 天堂一区人妻无码 | 激情综合激情五月俺也去 | 曰韩无码二三区中文字幕 | 午夜精品久久久久久久 | 国産精品久久久久久久 | 国产免费久久久久久无码 | 高中生自慰www网站 | 久久无码人妻影院 | 综合激情五月综合激情五月激情1 | 亚洲人成影院在线观看 | 18禁黄网站男男禁片免费观看 | 国产午夜精品一区二区三区嫩草 | av在线亚洲欧洲日产一区二区 | 欧美人与禽zoz0性伦交 | 99久久99久久免费精品蜜桃 | 一本大道久久东京热无码av | 99精品视频在线观看免费 | 婷婷五月综合激情中文字幕 | 国产午夜精品一区二区三区嫩草 | 亚洲精品国偷拍自产在线麻豆 | 我要看www免费看插插视频 | 亚洲日韩中文字幕在线播放 | 无码纯肉视频在线观看 | 人人妻人人澡人人爽欧美精品 | 国产在线精品一区二区高清不卡 | 女人被男人躁得好爽免费视频 | 久久久精品欧美一区二区免费 | 波多野42部无码喷潮在线 | 日韩人妻无码中文字幕视频 | 双乳奶水饱满少妇呻吟 | 国产亚洲精品久久久久久 | 水蜜桃亚洲一二三四在线 | 国产在线aaa片一区二区99 | 久久婷婷五月综合色国产香蕉 | 久久久国产一区二区三区 | 亚洲精品一区二区三区大桥未久 | 成人免费视频视频在线观看 免费 | 无码av中文字幕免费放 | 亚洲一区二区三区在线观看网站 | 国产亲子乱弄免费视频 | 少妇厨房愉情理9仑片视频 | 99久久婷婷国产综合精品青草免费 | 麻豆国产97在线 | 欧洲 | 无码人妻久久一区二区三区不卡 | 小sao货水好多真紧h无码视频 | 大地资源网第二页免费观看 | 99国产精品白浆在线观看免费 | 国产va免费精品观看 | 久久精品国产精品国产精品污 | 精品久久久久香蕉网 | 亚洲精品无码国产 | 精品偷自拍另类在线观看 | 色综合久久久无码网中文 | 天天躁夜夜躁狠狠是什么心态 | 无码av免费一区二区三区试看 | 国产明星裸体无码xxxx视频 | 7777奇米四色成人眼影 | 色婷婷综合中文久久一本 | 麻豆国产人妻欲求不满谁演的 | 香蕉久久久久久av成人 | 国产口爆吞精在线视频 | 国内精品九九久久久精品 | 国内精品九九久久久精品 | av小次郎收藏 | 又紧又大又爽精品一区二区 | 国产精品亚洲а∨无码播放麻豆 | 天干天干啦夜天干天2017 | 久久人妻内射无码一区三区 | 日本精品久久久久中文字幕 | 精品无码av一区二区三区 | 色婷婷综合中文久久一本 | 日本xxxx色视频在线观看免费 | 亚洲成a人片在线观看无码3d | 国内少妇偷人精品视频 | 又大又紧又粉嫩18p少妇 | 欧洲欧美人成视频在线 | 日韩无套无码精品 | 欧美日韩一区二区免费视频 | 中文字幕无线码 | www国产亚洲精品久久久日本 | 国模大胆一区二区三区 | 亚洲人成网站色7799 | 国产偷国产偷精品高清尤物 | 搡女人真爽免费视频大全 | 色综合视频一区二区三区 | 亚洲а∨天堂久久精品2021 | 久久亚洲国产成人精品性色 | 天堂无码人妻精品一区二区三区 | 国产亚洲精品久久久久久大师 | 无遮挡啪啪摇乳动态图 | 亚洲国产av美女网站 | 亚洲国产欧美日韩精品一区二区三区 | 一本久道久久综合狠狠爱 | 亚洲综合色区中文字幕 | 又粗又大又硬毛片免费看 | 日本丰满护士爆乳xxxx | 欧美丰满熟妇xxxx性ppx人交 | 久久午夜无码鲁丝片秋霞 | 国产成人精品无码播放 | 色综合久久久久综合一本到桃花网 | 蜜桃臀无码内射一区二区三区 | 无码人妻精品一区二区三区不卡 | 久久精品国产一区二区三区肥胖 | 国产99久久精品一区二区 | 欧美第一黄网免费网站 | 亚洲国产精品久久久天堂 | 伊人久久大香线蕉午夜 | 成年美女黄网站色大免费全看 | 鲁鲁鲁爽爽爽在线视频观看 | 国产女主播喷水视频在线观看 | 国产欧美精品一区二区三区 | 久久国产精品精品国产色婷婷 | 樱花草在线社区www | 欧美 亚洲 国产 另类 | 2019nv天堂香蕉在线观看 | 色欲人妻aaaaaaa无码 | 丝袜足控一区二区三区 | 国产97色在线 | 免 | 人妻aⅴ无码一区二区三区 | 99久久精品日本一区二区免费 | 国产内射老熟女aaaa | 色一情一乱一伦一区二区三欧美 | 青草青草久热国产精品 | 国产美女精品一区二区三区 | 2020最新国产自产精品 | 亚洲啪av永久无码精品放毛片 | 丰满人妻被黑人猛烈进入 | 国产亚洲人成在线播放 | 国产成人av免费观看 | 亚洲熟熟妇xxxx | 国产精品.xx视频.xxtv | 狠狠色欧美亚洲狠狠色www | 国产无套粉嫩白浆在线 | 午夜性刺激在线视频免费 | 国产黄在线观看免费观看不卡 | 久久99精品久久久久久动态图 | 国产凸凹视频一区二区 | 爆乳一区二区三区无码 | 中文字幕人成乱码熟女app | 亚洲色欲色欲欲www在线 | 久久综合激激的五月天 | 乱码av麻豆丝袜熟女系列 | 久精品国产欧美亚洲色aⅴ大片 | 中国大陆精品视频xxxx | 久久亚洲日韩精品一区二区三区 | 熟女少妇人妻中文字幕 | 无码人妻少妇伦在线电影 | 丰满人妻精品国产99aⅴ | 国产乱码精品一品二品 | 亚洲欧美日韩综合久久久 | 国内精品人妻无码久久久影院蜜桃 | 兔费看少妇性l交大片免费 | 国产精品久久福利网站 | 国产av一区二区三区最新精品 | 精品午夜福利在线观看 | 小泽玛莉亚一区二区视频在线 | 国产免费久久精品国产传媒 | 特黄特色大片免费播放器图片 | 中文字幕无码日韩欧毛 | 亚洲熟妇自偷自拍另类 | 亚洲色偷偷男人的天堂 | 中文字幕人妻无码一夲道 | 亚洲精品国偷拍自产在线麻豆 | 久久久久久亚洲精品a片成人 | 搡女人真爽免费视频大全 | 久久99国产综合精品 | 久久亚洲日韩精品一区二区三区 | 人人妻人人澡人人爽欧美一区九九 | 亚洲国精产品一二二线 | 又粗又大又硬又长又爽 | 成人综合网亚洲伊人 | 麻豆精品国产精华精华液好用吗 | 中文字幕无线码 | 久久综合九色综合欧美狠狠 | 国产精品久久久久9999小说 | 亚洲精品成人福利网站 | 久久久久久九九精品久 | 亚洲一区二区观看播放 | av香港经典三级级 在线 | 青草青草久热国产精品 | 丰满人妻翻云覆雨呻吟视频 | 99久久亚洲精品无码毛片 | 对白脏话肉麻粗话av | 久久久婷婷五月亚洲97号色 | 国产精品a成v人在线播放 | 国产成人无码a区在线观看视频app | 领导边摸边吃奶边做爽在线观看 | av无码不卡在线观看免费 | 桃花色综合影院 | 好男人www社区 | 久久久精品国产sm最大网站 | 影音先锋中文字幕无码 | 免费观看又污又黄的网站 | 欧美国产日韩久久mv | 国产舌乚八伦偷品w中 | 成人性做爰aaa片免费看不忠 | 少妇无码一区二区二三区 | 久久精品女人天堂av免费观看 | 中文字幕人妻丝袜二区 | 人妻体内射精一区二区三四 | 国产区女主播在线观看 | 天天躁夜夜躁狠狠是什么心态 | 清纯唯美经典一区二区 | 97精品国产97久久久久久免费 | 色综合久久久无码网中文 | 99久久精品国产一区二区蜜芽 | 欧美日韩亚洲国产精品 | 国产精品美女久久久 | 色五月五月丁香亚洲综合网 | 亚洲大尺度无码无码专区 | 欧美熟妇另类久久久久久多毛 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲色欲久久久综合网东京热 | 精品无人区无码乱码毛片国产 | 午夜丰满少妇性开放视频 | 天天躁日日躁狠狠躁免费麻豆 | 性生交大片免费看女人按摩摩 | 国产香蕉尹人综合在线观看 | a在线观看免费网站大全 | 久久精品人人做人人综合试看 | 色婷婷久久一区二区三区麻豆 | 少妇激情av一区二区 | 婷婷丁香五月天综合东京热 | 最新国产麻豆aⅴ精品无码 | 午夜精品久久久久久久 | 丰满人妻一区二区三区免费视频 | 亚洲自偷自拍另类第1页 | 国内精品人妻无码久久久影院 | 亚洲精品中文字幕 | 久久久久久久人妻无码中文字幕爆 | 性欧美videos高清精品 | 精品欧美一区二区三区久久久 | 亚洲中文无码av永久不收费 | 亚洲日韩av一区二区三区中文 | 国产一精品一av一免费 | 午夜性刺激在线视频免费 | 综合人妻久久一区二区精品 | 国产精品无码一区二区桃花视频 | 强奷人妻日本中文字幕 | 久久久精品456亚洲影院 | a片在线免费观看 | 精品偷拍一区二区三区在线看 | 麻豆国产丝袜白领秘书在线观看 | 伊人色综合久久天天小片 | 国产无套内射久久久国产 | 亚洲精品一区二区三区在线观看 | 色婷婷av一区二区三区之红樱桃 | 亚洲成色www久久网站 | 51国偷自产一区二区三区 | 福利一区二区三区视频在线观看 | 一本无码人妻在中文字幕免费 | 久久熟妇人妻午夜寂寞影院 | 少妇愉情理伦片bd | 国模大胆一区二区三区 | 国产乱人无码伦av在线a | 日韩精品无码一区二区中文字幕 | 亚洲色在线无码国产精品不卡 | 日韩精品一区二区av在线 | 国产精品美女久久久网av | 国产精品久久久午夜夜伦鲁鲁 | 少妇一晚三次一区二区三区 | 成人三级无码视频在线观看 | 麻豆成人精品国产免费 | 俺去俺来也www色官网 | 欧美性黑人极品hd | 久久国产自偷自偷免费一区调 | 亚洲色成人中文字幕网站 | 无码乱肉视频免费大全合集 | 久久99久久99精品中文字幕 | 人人超人人超碰超国产 | 精品少妇爆乳无码av无码专区 | 久久久www成人免费毛片 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 无人区乱码一区二区三区 | 国产激情综合五月久久 | 天天摸天天碰天天添 | 人人妻人人藻人人爽欧美一区 | 亚洲午夜无码久久 | 任你躁在线精品免费 | 亚洲精品久久久久avwww潮水 | 久久综合给合久久狠狠狠97色 | 少妇性俱乐部纵欲狂欢电影 | 小泽玛莉亚一区二区视频在线 | 日韩精品乱码av一区二区 | 中文字幕人妻无码一夲道 | 日本精品久久久久中文字幕 | 乱码午夜-极国产极内射 | 久久精品人妻少妇一区二区三区 | 久久久久久久久888 | 日本肉体xxxx裸交 | 中文字幕日产无线码一区 | 乱码午夜-极国产极内射 | 无码午夜成人1000部免费视频 | 亚洲码国产精品高潮在线 | 亚洲国产欧美国产综合一区 | 久久亚洲中文字幕无码 | 欧美真人作爱免费视频 | 久久亚洲精品中文字幕无男同 | 国产在线无码精品电影网 | 十八禁视频网站在线观看 | 色老头在线一区二区三区 | 国产一区二区三区日韩精品 |