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

為什么消息會重復消費,我從RocketMQ源碼中扒出了7種原因,有點小坑

開發 前端
為了解決這個問題,RocketMQ引入了定時清理的機制,定時清理長時間消費的消息,這樣消費進度就可以提交了。

大家好,我是三友~~

在眾多關于MQ的面試八股文中有這么一道題,“如何保證MQ消息消費的冪等性”。

為什么需要保證冪等性呢?是因為消息會重復消費。

為什么消息會重復消費?

明明已經消費了,為什么消息會被再次被消費呢?

不同的MQ產生的原因可能不一樣

本文就以RocketMQ為例,來扒一扒RocketMQ中會導致消息重復消息的原因,最終你會發現,其實消息重復消費算是RocketMQ無奈的“bug”。

如果有對RocketMQ不熟悉的小伙伴,可以看看我之前寫的 RocketMQ保姆級教程? 和 RocketMQ消息短暫而又精彩的一生 這兩篇文章。

圖片

消息發送異常時重復發送

首先,我們來瞅瞅RocketMQ發送消息和消費消息的基本原理。

如圖,簡單說一下上圖中的概念:

  • Broker,就是RocketMQ的服務端,如上圖就有兩個服務實例
  • Topic就是一類消息集合的名字
  • Queue就是Topic的對應的隊列,消息都存在Queue上,每個Topic都會有自己的幾個Queue

所以,整個消息發送和消費過程大致如下:

  • 生產者在發送消息之前根據負載均衡策略(默認是輪詢)選擇一個Queue,然后跟這個Queue所在的機器建立連接,把消息發送到這個Queue上
  • 消費者只要消費這個Queue,那么就能消費到消息

在正常情況下,生產者的確是按照這個方式來發送消息的

但是當出現了異常時,這種異常包括消息發送超時、響應超時等等,RocketMQ為了保證消息成功發送,會進行消息發送的重試操作,默認情況下會最多會重試兩次

圖片

重試操作比較簡單,就是選擇另一臺機器的Queue來發送。

雖然重試操作可以很大程度保證消息能夠發送成功,但是同時也會帶來消息重復發送的問題。

舉個例子,假設生產者向A機器發送消息,發生了異常,響應超時了,但是就一定代表消息沒發成功么?

不一定,有可能會出現服務端的確接受到并處理了消息,但是由于網絡波動等等,導致生產者接收不到服務端響應的情況,此時消息處理成功了,但是生成者還是以為發生了異常

此時如果發生重試操作,那么勢必會導致消息被發送了兩次甚至更多次,導致服務端存了多條相同的消息,那么就一定會導致消費者重復消費消息。

消費消息拋出異常

在RocketMQ的并發消費消息的模式下,需要用戶實現MessageListenerConcurrently接口來處理消息

圖片

當消費者獲取到消息之后會調用MessageListenerConcurrently?的實現,傳入需要消費的消息集合msgs?,這里提到的msgs很重要

圖片

如上代碼,當消息消費出現異常的時候,status?就會為null,后面就會將status?設置成為RECONSUME_LATER。

RECONSUME_LATER翻譯成功中文就是稍后重新消費的意思

所以從這可以看出,一旦拋出異常,那么消息之后就可以被重復消息。

到這其實可能有小伙伴覺得消息消費失敗重新消費很正常,保證消息盡可能消費成功。

對,這句話不錯,的確可以在一定程度上保證消費異常的消息可以消費成功。

但是坑不在這,而是前面提到的消費時傳入的整個集合中的消息都需要被重新消費。

具體的原因我們接著往下看

當消息處理之后,不論是成功還是異常,都需要對結果進行處理,代碼如下

圖片

當處理結果為RECONSUME_LATER?的時候(異常會設置為RECONSUME_LATER?),此時ackIndex?會設置成-1?,后面循環遍歷的時候就會遍歷到所有這次消費的消息,然后調用sendMessageBack?方法,sendMessageBack方式是用來實現消息重新消費的邏輯,這里就不展開說了。

所以,一旦被消費的一批消息中出現一個消費異常的情況,那么就會導致整批消息被重新消費,從而會導致在出現異常之前的成功處理的消息都會被重復消費,非??印?/p>

不過好在消費時傳入的消息集合中的消息數量是可以設置的,并且默認就是1

圖片

也就說默認情況下那個集合中就一條消息,所以默認情況下不會出現消費成功的消息被重復消費的情況。

所以這個參數不要輕易設置,一旦設置大了,就可能導致消息被重新消費。

除了并發消費消息的模式以外,RocketMQ還支持順序消費消息的模式,也會造成重復消費,邏輯其實差不多,但是在實現消息重新消費的邏輯不一樣。

消費者提交offset失敗

首先來講一講什么是offset。

前面說過,消息在發送的時候需要指定發送到,消息最后會被放到Queue中,其實真正的消息不是在Queue中,Queue存的是每個消息的位置,但是你可以理解為Queue存的是消息。

而消息在Queue中是有序號的,這個序號就被稱為offset,從0開始,單調遞增1。

比如說,如上圖,消息1的offset就是0,消息2的offset就是1,依次類推。

這個offset的一個作用就是用來管理消費者的消費進度。

當消費者在成功消費消息之后,需要將所消費的消息的offset提交給RocketMQ服務端,告訴RocketMQ,這個Queue的消息我已經消費到了這個位置了。

提交offset的代碼就在上述第二節提到的處理結果的后面

這樣有一個好處,那么一旦消費者重啟了或者其它啥的要從這個Queue拉取消息的時候,此時他只需要問問RocketMQ服務端上次這個Queue消息消費到哪個位置了,之后消費者只需要從這個位置開始消費消息就行了,這樣就解決了接著消費的問題。

但是RocketMQ在設計的時候,當消費完消息的時候并不是同步告訴RocketMQ服務端offset,而是定時發送。

如圖,當消費者消費完消息的時候,會將offset保存到內存中的一個Map數據結構中,所以上面截圖的那段代碼其實是更新內存中的offset

而在消費者啟動的時候會開啟一個定時任務,默認是5s一次,會通過網絡請求將內存中的每個Queue的消費進度offset發送給RocketMQ服務端。

由于是定時任務,所以就可能出現服務器一旦宕機,導致最新消費的offset沒有成功告訴RocketMQ服務端的情況

此時,消費進度offset就丟了,那么消費者重啟的時候只能從RocketMQ中獲取到上一次提交的offset,從這里開始消費,而不是最新的offset,出現明明消費到了第8個消息,RocketMQ卻告訴他只消費到了第5個消息的情況,此時必然會導致消息又出現重復消費的情況。

服務端持久化offset失敗

上一節說到,消費者會有一個每隔5s鐘的定時任務將每個隊列的消費進度offset提交到RocketMQ服務端

當RocketMQ服務端接收到提交請求之后,會將這個消費進度offset保存到內存中

同時為了保證RocketMQ服務端重啟消費進度不會丟失,也會開啟一個定時任務,默認也是5s一次,將內存中的消費進度持久化到磁盤文件中

所以,整個消費進度offset的數據流轉過程如下

當RocketMQ服務端重啟之后,會從磁盤中讀取文件的數據加載到內存中。

跟消費者產生的問題一樣,一旦RocketMQ發生宕機,那么offset就有可能丟失5s鐘的數據,RocketMQ服務端一旦重啟,消費者從RocketMQ服務端獲取到的消息消費進度就比實際消費的進度低,同樣也會導致消息重復消費。

主從同步offset失敗

在RocketMQ的高可用模式中,有一種名叫主從同步的模式,當主節點掛了之后,從節點可以手動升級為主節點對外提供訪問,保證高可用。

在主從同步模式下,從節點默認每隔10s會向主節點發送請求,同步一些元數據,這些元數據就包括消費進度

當從節點獲取到主節點的消費進度之后,會將主節點的消費進度設置到自己的內存中,同時也會持久化到磁盤。

所以整個消費進度offset的數據的流轉過程就會變成如下

同樣,由于也是定時任務,那么一旦主節點掛了,從節點就會丟10s鐘的消費進度,此時如果從節點升級為主節點對外提供訪問,就會出現跟上面提到的一樣的情況,消費者從這個新的主節點中拿到的消費進度比實際的低,自然而然就會重復消費消息。

所以,總的來說,在消費進度數據流轉的過程中,只要某個環節出現了問題,都有很有可能會導致消息重復消費。

重平衡

先來講一講什么是重平衡,其實重平衡很好理解,我說一下你就明白了。

前面說到,消費者是從隊列中獲取消息的

在RocketMQ中,有個消費者組的概念,一個消費者組中可以有多個消費者,不同消費者組之間消費消息是互不干擾的,所以前面提到的消費者其實都在消費組下

在同一個消費者組中,消息消費有兩種模式:

  • 集群消費模式
  • 廣播消費模式

由于RocketMQ默認是集群消費模式,并且絕大多數業務場景都是使用集群消費模式,所以這里就不討論廣播消費模式了,感興趣的同學可以看看RocketMQ消息短暫而又精彩的一生 這篇文章。

集群消費模式是指同一條消息只能被這個消費者組消費一次,這就叫集群消費。

并且前面提到提交消費進度給RocketMQ服務端的情況只會集群消費模式下才會有,在廣播消費模式不會提給到RocketMQ服務端,僅僅持久化到本地磁盤

同時前面說的消費者提交消費進度真正提交的是消費者組對于這個Queue的消費進度,而不是指具體的某個消費者對于Queue消費進度。

雖然說這里將前面提到的一些含義更深一步,但是并不妨礙前面的理解。

集群消費的實現就是將隊列按照一定的算法分配給消費者,默認是按照平均分配的。

如圖所示,假設某個topic有4個Queue,有個消費者組訂閱了這個topic,這個消費者組有兩個消費者1和消費者2,此時每個消費者就可以被分配兩個隊列,這樣就能保證消息正常情況下只會被消費一次。如果只有一個消費者,那么這個消費者就會消費所有隊列,很好理解。

接著后面又啟動了一個消費者3,此時為了保證剛上線的消費者3能夠消費消息,就要進行重平衡操作,重新分配每個消費者消費的隊列。

在重平衡之后就可能會出現下面這種情況

如上圖,原本被消費者2消費的Queue4被分配給消費者3,此時消費者3就能消費到消息了,這就是重平衡。

除了新增消費者會導致重平衡之外,消費者數量減少,隊列的數量增加或者減少都會觸發重平衡。

在了解了重平衡概念之后,接下來分析一下為什么重平衡會導致消息的重復消費。

假設在進行重平衡時,還未重平衡完之前,消費者2此時還是會按照上面第二節提到的消費消息的邏輯來消費Queue4的消息

當消費者2已經重平衡完成了,發現Queue4自己已經不能消費了,那么此時就會把這個Queue4設置為dropped,就是丟棄的意思

但是由于重平衡進行時消費者2仍然在消費Queue4的消息,但是當消費完之后,發現隊列被設置成dropped,那么此時被消費者2消費消息的offset就不會被提交,原因如下代碼

這段代碼前面已經出現過,一旦dropped被設置成true,這個if條件就通不過,消費進度就不會被提交。

成功消費消息了,但是卻不提交消費進度,這就非??恿?。。

于是當消費者3開始消費Queue4的消息的時候,他就會問問RocketMQ服務端,我消費者3所在的消費者組對于Queue4這個隊列消費到哪了,我接著消費就行了。

此時由于沒有提交消費進度,RocketMQ服務端告訴消費者3的消費進度就會比實際的低,這就造成了消息重復消費的情況。

清理長時間消費的消息

在RocketMQ中有這么一個機制,會定時清理長時間正在消費的消息。

如圖,假設有5條消息現在正在被消費者處理,這5條消息會被存在一個集合中,并且是按照offset的大小排序,消息1的offset最小,消息5的offset最大。

RocketMQ消費者啟動時會開啟一個默認15分鐘執行一次的定時任務

圖片

這個定時任務會去檢查正在處理的消息的第一條消息,也就是圖中的消息1,一旦發現消息1已經處理了超過15分鐘了,那么此時就會將消息1從集合中移除,之后會隔一定時間再次消費消息1。

這也會有坑,雖然消息1從集合中被移除了,但是消息1并沒有消失,仍然被消費者繼續處理,但是消息1隔一定時間就會再次被消費,就會出現消息1被重復消費的情況。

這就是清理長時間消費的消息導致重復消費的原因。

但此時又會引出一個新的疑問,為什么要移除這個處理超過15分鐘的消息呢?

這就又跟前面提到的消費進度提交有關!

前面說過消息被消費完成之后會提交消費進度,提交的消費進度實際會有兩種情況:

第一種就是某個線程消費了所有的消息,當把所有的消息都消費完成之后,就會把消息從集合中全部移除,此時提交的消費進度offset就是圖中消息5的offset+1

加1的操作是為了保證如果發生重啟,那么消費者下次消費的起始位置就是消息5后面的消息,保證消息5不被重復消費

第二種情況就不太一樣了

假設現在有兩個線程來處理這5條消息,線程1處理前2條,線程2處理后3條,如圖

圖片

現在線程1出現了長時間處理消息的情況。

此時線程2處理完消息之后,移除后面三條消息,準備提交offset的時候發現集合中還有元素,就是線程1正在處理的前兩條消息,此時線程2提交的offset并不是消息5對應的offset,而是消息1的offset,代碼如下

圖片

這么做的主要原因就是保證消息1和消息2至少被消費一次。

因為一旦提交了消息5對應的offset,如果消費者重啟了,下次消費就會接著從消息5的后面開始消費,而對于消息1和消息2來說,并不知道有沒有被消費成功,就有可能出現消息丟失的情況。

所以,一旦集合中最前面的消息長時間處理,那么就會導致后面被消費的消息進度無法提交,那么重啟之后就會導致大量消息被重復消費。

為了解決這個問題,RocketMQ引入了定時清理的機制,定時清理長時間消費的消息,這樣消費進度就可以提交了。

最后

總得來說,RocketMQ中還是存在很多種導致消息重讀消費的情況,并且官方也說了,只是在大多數情況下消息不會重復

圖片

所以如果你的業務場景中需要保證消息不能重復消費,那么就需要根據業務場景合理的設計冪等技術方案。

責任編輯:武曉燕 來源: 三友的java日記
相關推薦

2024-03-12 00:00:00

RocketMQ服務端磁盤

2021-08-23 08:19:48

辭職Google工程師

2023-12-25 19:28:59

RocketMQ大數據

2013-06-18 10:55:26

PhoneGap

2024-05-23 12:11:39

2025-03-21 10:33:22

2021-09-07 15:41:35

Bug誘因代碼

2024-06-05 06:37:19

2010-03-09 13:16:11

LinuxWindows

2021-03-08 10:19:59

MQ消息磁盤

2021-03-13 11:23:51

源碼邏輯框架

2024-04-09 09:08:09

Kafka消息架構

2021-05-10 09:35:58

Kubernetes節點Join

2012-03-19 20:52:55

小米

2022-03-27 09:06:04

React類型定義前端

2019-11-20 09:00:52

Linux 開發操作系統

2022-10-31 08:40:06

消息RocketMQ消息重復

2017-10-19 12:45:07

PHP

2011-05-27 09:19:32

Windows 7崩潰

2016-12-14 08:30:14

點贊
收藏

51CTO技術棧公眾號

日韩视频一区在线| 亚洲精品videosex极品| 国产精品爽爽爽| 翔田千里88av中文字幕| 哺乳一区二区三区中文视频| 欧美日韩免费观看中文| 亚洲毛片aa| 不卡av中文字幕| 久久久www| 久久国产精品久久国产精品| 在线观看国产网站| 99国内精品久久久久| 亚洲成人自拍偷拍| 亚洲午夜精品久久久中文影院av| 亚洲AV无码精品自拍| 日韩高清电影一区| 欧美精品www在线观看| 日本一道本视频| 国产一区二区三区不卡av| 欧美性大战久久久久久久蜜臀| 国产成人生活片| 国产视频第一区| 粉嫩嫩av羞羞动漫久久久| 国产精品狼人色视频一区| 久久久久免费看| 成人羞羞网站入口免费| 亚洲国产精品专区久久| 中文字幕日韩综合| 日韩欧美一区二区三区在线观看| 亚洲午夜在线视频| 欧美性视频在线播放| 你懂的在线播放| 成人一道本在线| 91中文在线视频| 中文字幕在线播放日韩| 99在线|亚洲一区二区| 久久国产精品影视| 天堂网av2018| 国产一区二区精品久| 亚洲精品久久久久中文字幕二区| 久久综合桃花网| 亚洲精品大片| 欧美日韩久久久久久| 成人观看免费完整观看| www.九色在线| 亚洲成在人线免费| 日韩视频免费播放| 好久没做在线观看| 夜夜嗨av一区二区三区网页| 男人的天堂视频在线| 乱人伦中文视频在线| 国产精品白丝在线| 伊人久久av导航| 一级毛片视频在线观看| 国产精品美女久久久久久久网站| 日韩中文字幕一区| 国产在线观看高清视频| 久久色.com| 奇米视频888战线精品播放| 亚洲色欧美另类| 91影院在线观看| 蜜桃精品久久久久久久免费影院 | 欧美日韩性生活| 992kp快乐看片永久免费网址| 国产成人精品亚洲日本在线观看| 日本韩国精品一区二区在线观看| 超碰网在线观看| 亚洲欧美在线成人| 欧美日本免费一区二区三区| 三区视频在线观看| 奇米一区二区| 亚洲国内精品视频| 成人免费网站黄| 日韩免费av| 久久夜色精品国产欧美乱| 青青草原在线免费观看| 亚洲人体偷拍| 国产精品av在线| 亚洲一区二区三区高清视频| 国产一区二区三区久久悠悠色av| 99re国产| 毛片免费在线| 亚洲美女免费在线| 黄页网站大全在线观看| 电影天堂国产精品| 91精品国产综合久久香蕉的特点| 女女调教被c哭捆绑喷水百合| 久草在线综合| 最好看的2019的中文字幕视频| 91杏吧porn蝌蚪| 国产一区二区三区久久久久久久久 | 91人人爽人人爽人人精88v| 成人av免费播放| 91蜜桃免费观看视频| 亚洲精品日韩精品| xxxx视频在线| 欧美影院午夜播放| 国产一精品一aⅴ一免费| 亚洲人挤奶视频| 美日韩丰满少妇在线观看| 伊人久久综合视频| 韩国av一区二区三区在线观看| 国产一区二区在线观看免费播放| melody高清在线观看| 亚洲线精品一区二区三区| 亚洲xxxx2d动漫1| 国产厕拍一区| 日韩一级黄色av| 亚洲免费黄色网址| 国产呦精品一区二区三区网站 | 成人羞羞视频播放网站| 亚洲3p在线观看| 国产又粗又猛视频| 久久久综合九色合综国产精品| 永久免费在线看片视频| 色天使综合视频| 欧美精品一区二区三区在线| 女性裸体视频网站| 久久精品1区| 国产欧美一区二区三区另类精品 | 国产999精品久久久| www香蕉视频| 国产精品久久久久久久久动漫 | 久久天堂影院| 亚洲欧美另类国产| 国产极品在线播放| 国产一区二区h| 亚洲巨乳在线观看| 久久精品国产精品亚洲色婷婷| 91传媒理伦片在线观看| 久久av网站| 伊人青青综合网站| 日韩av片在线播放| 国产精品99久久久久| 自拍视频一区二区三区| 日本一区二区电影| 亚洲午夜未删减在线观看| 看片网址国产福利av中文字幕| 国产精品主播直播| 手机看片日韩国产| 99精品国产九九国产精品| 日韩中文字在线| 在线播放亚洲精品| 国产精品久久久一本精品| 国产成人av影视| 视频一区中文| 国产成人鲁鲁免费视频a| 你懂的在线网址| 色综合久久88色综合天天免费| 国产性生活毛片| 亚洲三级色网| 精品不卡一区二区三区| а√天堂8资源在线| 亚洲第一网站免费视频| 国产精品99re| 91麻豆123| 欧美黄色一级片视频| 久久综合亚洲| 国产精品国语对白| 日本视频在线观看| 欧美一区二区成人| www.99re7.com| 99re成人精品视频| 日韩av资源在线| 色琪琪久久se色| 91久久久久久久| 亚洲区自拍偷拍| 国产麻豆精品一区| 久久影院午夜片一区| www黄色在线| 欧美丝袜激情| 成人免费网站在线观看| 制服丝袜中文字幕在线| 亚洲国产99精品国自产| 国产成人在线视频观看| 亚洲手机视频| 亚洲国产精品久久久久蝴蝶传媒| 极品尤物一区| 中文字幕一区二区视频| 中文字幕黄色大片| 国产一区二区网| 中文字幕成人一区| 天天好比中文综合网| 欧美在线一级视频| 国产一区欧美二区三区| 都市激情久久久久久久久久久| 日本一区二区三区视频在线播放| 永久免费在线看片视频| 91嫩草国产丨精品入口麻豆| 久久精品一区二区三区四区五区| 亚洲精品一二| 日韩欧美在线电影| 视频一区中文字幕精品| 欧美在线影院在线视频| 久久日韩视频| 日韩麻豆第一页| 国产一区二区三区四区视频| 亚洲国产精品久久久男人的天堂 | 国产一区二区三区四区福利| 国产精品一区二区三区在线免费观看| 亚洲高清免费观看高清完整版在线观看 | 国产91露脸合集magnet| 久久综合久久色| 国内精品99| 亚洲精品白虎| 婷婷综合一区| 亚洲最大的成人网| 在线一区视频观看| 久久久久久久久久久网站| 福利片在线看| 亚洲精品www久久久| 国产精品系列视频| 91久久精品一区二区三| 午夜偷拍福利视频| 亚洲乱码国产乱码精品精可以看 | 91精品婷婷国产综合久久竹菊| 九九九在线观看| 亚洲高清中文字幕| 唐朝av高清盛宴| 国产精品久久久久一区二区三区| 插我舔内射18免费视频| 国产在线一区观看| www.涩涩涩| 欧美综合国产| heyzo亚洲| 在线观看亚洲| 美女扒开大腿让男人桶| 欧美一区网站| 久久久一二三四| 99re6这里只有精品| 日本亚洲欧洲精品| 九九免费精品视频在线观看| 国产伦精品一区二区三区照片| 国产精品免费精品自在线观看| 国产精品吊钟奶在线| 成人片免费看| 日本国产欧美一区二区三区| 色偷偷色偷偷色偷偷在线视频| 欧美激情免费在线| 最新超碰在线| 九九精品在线播放| 在线观看中文| 欧美巨乳在线观看| 五月婷婷视频在线观看| 欧美精品在线免费观看| av在线下载| 欧美高清视频免费观看| 色在线视频网| 久久人人爽人人爽人人片av高请| 日本无删减在线| 久久久久久com| 精品人人视频| 人人澡人人澡人人看欧美| 精品国产免费人成网站| 国产成人精品免费久久久久| 日本高清不卡一区二区三区视频| 91成人免费观看网站| 忘忧草在线影院两性视频| 国产91亚洲精品| 久久电影天堂| 亚洲一区二区三区在线免费观看| 欧洲一区在线| 精品欧美国产| 精品大片一区二区| 影音先锋亚洲视频| 欧美日韩午夜| 国产原创中文在线观看 | 国产中文在线视频| 中文字幕一区二区三区电影| 免费网站免费进入在线| 欧美日韩福利电影| 精品捆绑调教一区二区三区| 国产精品成人国产乱一区| 欧美午夜三级| 国产精品三区在线| 欧美一区二区性| 草草草视频在线观看| 99精品热6080yy久久| 国产视频一区二区三区在线播放 | 美女羞羞视频在线观看| 欧美日韩国产二区| 欧美极度另类| 91亚洲永久免费精品| jizz性欧美23| 亚洲7777| 极品少妇一区二区三区| 妺妺窝人体色www在线观看| 国产精品一区久久久久| 熟妇高潮精品一区二区三区| 国产精品久久久久久久久久免费看| 久视频在线观看| 欧美伊人久久久久久久久影院| av老司机久久| 亚洲人成绝费网站色www| caopon在线免费视频| 日本欧美一二三区| 日韩精品免费视频一区二区三区 | 日韩视频精品在线观看| 一道本视频在线观看| 成人国产亚洲欧美成人综合网| 美国黑人一级大黄| 天天操天天综合网| 国产精品人妻一区二区三区| 日韩成人在线视频| 国产黄色小视频在线| 日本午夜在线亚洲.国产| 亚洲精选av| 亚洲欧美日韩另类精品一区二区三区 | 欧美—级在线免费片| 久久精品国产亚洲AV无码麻豆| 欧美视频一区二区三区在线观看| 日本美女一级视频| 麻豆一区二区在线观看| 国产一区二区主播在线| 精品国产乱码久久久久久郑州公司 | 国产一区二区三区观看| 少妇无套高潮一二三区| 亚洲va欧美va天堂v国产综合| 国产一区二区在线视频观看| 在线播放日韩av| 91黄页在线观看| 999精品视频一区二区三区| 日韩精品不卡一区二区| 日日摸日日碰夜夜爽av| 成人黄色网址在线观看| 久久久国产精品黄毛片| 91精品国产免费| 免费a级毛片在线播放| 国产精品久久久久福利| 中文字幕精品影院| 黄色免费视频大全| 不卡一卡二卡三乱码免费网站| 久草网站在线观看| 这里只有精品99re| 3p视频在线观看| 国产精品欧美一区二区| jizzjizz欧美69巨大| 成年人黄色片视频| 久久毛片高清国产| 国产免费a视频| 国产亚洲精品美女| 日韩一区二区三区免费| 日本一区二区不卡高清更新| 久久综合网络一区二区| 粉嫩av蜜桃av蜜臀av| 欧美性生交xxxxx久久久| 欧美套图亚洲一区| 国产精品18久久久久久首页狼| 最新亚洲精品| 成年人在线观看视频免费| 国产情人综合久久777777| 天堂网一区二区| 中文国产亚洲喷潮| 999精品视频在线观看| 免费久久久久久| 免费国产在线观看| 国产高清亚洲一区| 苍井空浴缸大战猛男120分钟| 大胆亚洲人体视频| 国产无精乱码一区二区三区| 亚洲第一区第二区| 国产夫妻在线播放| 另类视频在线观看+1080p| 久久精品网址| 国产精品无码无卡无需播放器| 欧美日精品一区视频| 黄网页在线观看| 日韩精品免费在线| 亚洲欧美激情网| 在线播放成人| 日本一区二区精品| 久久aⅴ国产欧美74aaa| 欧美日韩午夜视频| 欧美精品一区二区蜜臀亚洲| 密臀av在线播放| 视频在线观看成人| 国产白丝精品91爽爽久久| 少妇伦子伦精品无吗| 91精品麻豆| 日韩成人中文电影| 色呦呦网站在线观看| 国产亚洲二区| 丝袜美腿亚洲一区| 91日韩中文字幕| 日韩成人在线观看| 四虎国产精品免费久久| 国产亚洲黄色片| 国产欧美日本一区二区三区| 国产富婆一级全黄大片| 青青草成人在线| 综合久久十次| 日韩在线免费观看av| 欧美一二区视频| free欧美| 成人一区二区免费视频| 中文字幕二三区不卡| 天天干天天色天天| 国产精品永久免费观看| 在线欧美一区| 日韩av手机在线免费观看|