亭亭五月天在线观看,亭亭五月天在线观看,国产最新av一区二区,国产 高清 中文字幕,99re热久久亚洲综合精品成人,熟妇 一区二区三区,一级做a爰片性色毛片武则天,美女的骚穴视频播放,国产美女午夜免费视频

首頁>國內(nèi) > 正文

萬字長文講透 RocketMQ 的消費(fèi)邏輯

2023-06-12 10:16:05來源:勇哥java實(shí)戰(zhàn)分享

RocketMQ 是筆者非常喜歡的消息隊(duì)列,4.9.X 版本是目前使用最廣泛的版本,但它的消費(fèi)邏輯相對較重,很多同學(xué)學(xué)習(xí)起來沒有頭緒。

這篇文章,筆者梳理了 RocketMQ 的消費(fèi)邏輯,希望對大家有所啟發(fā)。

一、架構(gòu)概覽

在展開集群消費(fèi)邏輯細(xì)節(jié)前,我們先對 RocketMQ 4.9.X 架構(gòu)做一個(gè)概覽。


(資料圖)

整體架構(gòu)中包含四種角色:

1、NameServer

名字服務(wù)是是一個(gè)幾乎無狀態(tài)節(jié)點(diǎn),可集群部署,節(jié)點(diǎn)之間無任何信息同步。它是一個(gè)非常簡單的 Topic 路由注冊中心,其角色類似 Dubbo 中的 zookeeper ,支持 Broker 的動(dòng)態(tài)注冊與發(fā)現(xiàn)。

2、BrokerServer

Broker 主要負(fù)責(zé)消息的存儲、投遞和查詢以及服務(wù)高可用保證 。

3、Producer

消息發(fā)布的角色,Producer 通過 MQ 的負(fù)載均衡模塊選擇相應(yīng)的 Broker 集群隊(duì)列進(jìn)行消息投遞,投遞的過程支持快速失敗并且低延遲。

4、Consumer

消息消費(fèi)的角色,支持以 push 推,pull 拉兩種模式對消息進(jìn)行消費(fèi)。

RocketMQ 集群工作流程:

1、啟動(dòng) NameServer,NameServer 起來后監(jiān)聽端口,等待 Broker、Producer 、Consumer 連上來,相當(dāng)于一個(gè)路由控制中心。

2、Broker 啟動(dòng),跟所有的 NameServer 保持長連接,定時(shí)發(fā)送心跳包。心跳包中包含當(dāng)前 Broker信息( IP+端口等 )以及存儲所有 Topic 信息。注冊成功后,NameServer 集群中就有 Topic 跟 Broker 的映射關(guān)系。

3、收發(fā)消息前,先創(chuàng)建 Topic,創(chuàng)建 Topic 時(shí)需要指定該 Topic 要存儲在哪些 Broker 上,也可以在發(fā)送消息時(shí)自動(dòng)創(chuàng)建 Topic。

4、Producer 發(fā)送消息,啟動(dòng)時(shí)先跟 NameServer 集群中的其中一臺建立長連接,并從 NameServer 中獲取當(dāng)前發(fā)送的 Topic 存在哪些 Broker 上,輪詢從隊(duì)列列表中選擇一個(gè)隊(duì)列,然后與隊(duì)列所在的 Broker 建立長連接從而向 Broker 發(fā)消息。

5、Consumer 跟 Producer 類似,跟其中一臺 NameServer 建立長連接,獲取當(dāng)前訂閱 Topic 存在哪些 Broker 上,然后直接跟 Broker 建立連接通道,開始消費(fèi)消息。

二、發(fā)布訂閱

RocketMQ 的傳輸模型是:發(fā)布訂閱模型。

發(fā)布訂閱模型具有如下特點(diǎn):

消費(fèi)獨(dú)立相比隊(duì)列模型的匿名消費(fèi)方式,發(fā)布訂閱模型中消費(fèi)方都會(huì)具備的身份,一般叫做訂閱組(訂閱關(guān)系),不同訂閱組之間相互獨(dú)立不會(huì)相互影響。一對多通信基于獨(dú)立身份的設(shè)計(jì),同一個(gè)主題內(nèi)的消息可以被多個(gè)訂閱組處理,每個(gè)訂閱組都可以拿到全量消息。因此發(fā)布訂閱模型可以實(shí)現(xiàn)一對多通信。

RocketMQ 支持兩種消息模式:集群消費(fèi)( Clustering )和廣播消費(fèi)( Broadcasting )。

集群消費(fèi):同一 Topic 下的一條消息只會(huì)被同一消費(fèi)組中的一個(gè)消費(fèi)者消費(fèi)。也就是說,消息被負(fù)載均衡到了同一個(gè)消費(fèi)組的多個(gè)消費(fèi)者實(shí)例上。

廣播消費(fèi):當(dāng)使用廣播消費(fèi)模式時(shí),每條消息推送給集群內(nèi)所有的消費(fèi)者,保證消息至少被每個(gè)消費(fèi)者消費(fèi)一次。

為了實(shí)現(xiàn)這種發(fā)布訂閱模型 , RocketMQ 精心設(shè)計(jì)了它的存儲模型。先進(jìn)入 Broker 的文件存儲目錄。

RocketMQ 采用的是混合型的存儲結(jié)構(gòu)。

1、Broker 單個(gè)實(shí)例下所有的隊(duì)列共用一個(gè)數(shù)據(jù)文件(commitlog)來存儲

生產(chǎn)者發(fā)送消息至 Broker 端,然后 Broker 端使用同步或者異步的方式對消息刷盤持久化,保存至 commitlog 文件中。只要消息被刷盤持久化至磁盤文件 commitlog 中,那么生產(chǎn)者發(fā)送的消息就不會(huì)丟失。

單個(gè)文件大小默認(rèn) 1G , 文件名長度為 20 位,左邊補(bǔ)零,剩余為起始偏移量,比如 00000000000000000000 代表了第一個(gè)文件,起始偏移量為 0 ,文件大小為1 G = 1073741824 。

commitlog 目錄

這種設(shè)計(jì)有兩個(gè)優(yōu)點(diǎn):

充分利用順序?qū)?,大大提升寫入?shù)據(jù)的吞吐量;快讀定位消息。因?yàn)橄⑹且粭l一條寫入到 commitlog 文件 ,寫入完成后,我們可以得到這條消息的物理偏移量。每條消息的物理偏移量是唯一的, commitlog 文件名是遞增的,可以根據(jù)消息的物理偏移量通過二分查找,定位消息位于那個(gè)文件中,并獲取到消息實(shí)體數(shù)據(jù)。

2、Broker 端的后臺服務(wù)線程會(huì)不停地分發(fā)請求并異步構(gòu)建 consumequeue(消費(fèi)文件)和 indexfile(索引文件)

進(jìn)入索引文件存儲目錄 :

1、消費(fèi)文件按照主題存儲,每個(gè)主題下有不同的隊(duì)列,圖中主題 my-mac-topic 有 16 個(gè)隊(duì)列 (0 到 15) ;

2、每個(gè)隊(duì)列目錄下 ,存儲 consumequeue 文件,每個(gè) consumequeue 文件也是順序?qū)懭耄瑪?shù)據(jù)格式見下圖。

每個(gè) consumequeue 文件包含 30 萬個(gè)條目,每個(gè)條目大小是 20 個(gè)字節(jié),每個(gè)文件的大小是 30 萬 * 20 = 60萬字節(jié),每個(gè)文件大小約 5.72M 。

和 commitlog 文件類似,consumequeue 文件的名稱也是以偏移量來命名的,可以通過消息的邏輯偏移量定位消息位于哪一個(gè)文件里。

消費(fèi)文件按照主題-隊(duì)列來保存 ,這種方式特別適配發(fā)布訂閱模型。

消費(fèi)者從 Broker 獲取訂閱消息數(shù)據(jù)時(shí),不用遍歷整個(gè) commitlog 文件,只需要根據(jù)邏輯偏移量從 consumequeue 文件查詢消息偏移量 , 最后通過定位到 commitlog 文件, 獲取真正的消息數(shù)據(jù)。

要實(shí)現(xiàn)發(fā)布訂閱模型,還需要一個(gè)重要文件:消費(fèi)進(jìn)度文件。原因有兩點(diǎn):

不同消費(fèi)組之間相互獨(dú)立,不會(huì)相互影響 ;消費(fèi)者下次拉取數(shù)據(jù)時(shí),需要知道從哪個(gè)進(jìn)度開始拉取 ,就像我們小時(shí)候玩單機(jī)游戲存盤一樣。

因此消費(fèi)進(jìn)度文件需要保存消費(fèi)組所訂閱主題的消費(fèi)進(jìn)度。

我們?yōu)g覽下集群消費(fèi)場景下的 Broker 端的消費(fèi)進(jìn)度文件consumerOffset.json。

在進(jìn)度文件 consumerOffset.json 里,數(shù)據(jù)以 key-value 的結(jié)構(gòu)存儲,key 表示:主題@消費(fèi)者組 , value 是 consumequeue 中每個(gè)隊(duì)列對應(yīng)的邏輯偏移量 。

寫到這里,我們粗糙模擬下 RocketMQ存儲模型如何滿足發(fā)布訂閱模型(集群模式)。

1、發(fā)送消息:生產(chǎn)者發(fā)送消息到 Broker ;

2、保存消息:Broker 將消息存儲到 commitlog 文件 ,異步線程會(huì)構(gòu)建消費(fèi)文件 consumequeue ;

3、消費(fèi)流程:消費(fèi)者啟動(dòng)后,會(huì)通過負(fù)載均衡分配對應(yīng)的隊(duì)列,然后向 Broker 發(fā)送拉取消息請求。Broker 收到消費(fèi)者拉取請求之后,根據(jù)訂閱組,消費(fèi)者編號,主題,隊(duì)列名,邏輯偏移量等參數(shù) ,從該主題下的 consumequeue 文件查詢消息消費(fèi)條目,然后從 commitlog 文件中獲取消息實(shí)體。消費(fèi)者在收到消息數(shù)據(jù)之后,執(zhí)行消費(fèi)監(jiān)聽器,消費(fèi)完消息;

4、保存進(jìn)度:消費(fèi)者將消費(fèi)進(jìn)度提交到 Broker ,Broker 會(huì)將該消費(fèi)組的消費(fèi)進(jìn)度存儲在進(jìn)度文件里。

三、消費(fèi)流程

我們重點(diǎn)講解下集群消費(fèi)的消費(fèi)流程 ,因?yàn)榧合M(fèi)是使用最普遍的消費(fèi)模式,理解了集群消費(fèi),廣播消費(fèi)也就能順理成章的掌握了。

集群消費(fèi)示例代碼里,啟動(dòng)消費(fèi)者,我們需要配置三個(gè)核心屬性:消費(fèi)組名、訂閱主題、消息監(jiān)聽器,最后調(diào)用 start 方法啟動(dòng)。

消費(fèi)者啟動(dòng)后,我們可以將整個(gè)流程簡化成:

四、負(fù)載均衡

消費(fèi)端的負(fù)載均衡是指將 Broker 端中多個(gè)隊(duì)列按照某種算法分配給同一個(gè)消費(fèi)組中的不同消費(fèi)者,負(fù)載均衡是客戶端開始消費(fèi)的起點(diǎn)。

RocketMQ 負(fù)載均衡的核心設(shè)計(jì)理念是

消費(fèi)隊(duì)列在同一時(shí)間只允許被同一消費(fèi)組內(nèi)的一個(gè)消費(fèi)者消費(fèi)一個(gè)消費(fèi)者能同時(shí)消費(fèi)多個(gè)消息隊(duì)列

負(fù)載均衡是每個(gè)客戶端獨(dú)立進(jìn)行計(jì)算,那么何時(shí)觸發(fā)呢 ?

消費(fèi)端啟動(dòng)時(shí),立即進(jìn)行負(fù)載均衡;消費(fèi)端定時(shí)任務(wù)每隔 20 秒觸發(fā)負(fù)載均衡;消費(fèi)者上下線,Broker 端通知消費(fèi)者觸發(fā)負(fù)載均衡。

負(fù)載均衡流程如下:

1、發(fā)送心跳

消費(fèi)者啟動(dòng)后,它就會(huì)通過定時(shí)任務(wù)不斷地向 RocketMQ 集群中的所有 Broker 實(shí)例發(fā)送心跳包(消息消費(fèi)分組名稱、訂閱關(guān)系集合、消息通信模式和客戶端實(shí)例編號等信息)。

Broker 端在收到消費(fèi)者的心跳消息后,會(huì)將它維護(hù)在 ConsumerManager 的本地緩存變量 consumerTable,同時(shí)并將封裝后的客戶端網(wǎng)絡(luò)通道信息保存在本地緩存變量 channelInfoTable 中,為之后做消費(fèi)端的負(fù)載均衡提供可以依據(jù)的元數(shù)據(jù)信息。

2、啟動(dòng)負(fù)載均衡服務(wù)

負(fù)載均衡服務(wù)會(huì)根據(jù)消費(fèi)模式為”廣播模式”還是“集群模式”做不同的邏輯處理,這里主要來看下集群模式下的主要處理流程:

(1) 獲取該主題下的消息消費(fèi)隊(duì)列集合;

(2) 查詢 Broker 端獲取該消費(fèi)組下消費(fèi)者 Id 列表;

(3) 先對 Topic 下的消息消費(fèi)隊(duì)列、消費(fèi)者 Id 排序,然后用消息隊(duì)列分配策略算法(默認(rèn)為:消息隊(duì)列的平均分配算法),計(jì)算出待拉取的消息隊(duì)列;

平均分配算法

這里的平均分配算法,類似于分頁的算法,將所有 MessageQueue 排好序類似于記錄,將所有消費(fèi)端排好序類似頁數(shù),并求出每一頁需要包含的平均 size 和每個(gè)頁面記錄的范圍 range ,最后遍歷整個(gè) range 而計(jì)算出當(dāng)前消費(fèi)端應(yīng)該分配到的記錄。

(4) 分配到的消息隊(duì)列集合與 processQueueTable 做一個(gè)過濾比對操作。

消費(fèi)者實(shí)例內(nèi) ,processQueueTable 對象存儲著當(dāng)前負(fù)載均衡的隊(duì)列 ,以及該隊(duì)列的處理隊(duì)列 processQueue (消費(fèi)快照)。

標(biāo)紅的 Entry 部分表示與分配到的消息隊(duì)列集合互不包含,則需要將這些紅色隊(duì)列 Dropped 屬性為 true , 然后從 processQueueTable 對象中移除。綠色的 Entry 部分表示與分配到的消息隊(duì)列集合的交集,processQueueTable 對象中已經(jīng)存在該隊(duì)列。黃色的 Entry 部分表示這些隊(duì)列需要添加到 processQueueTable 對象中,為每個(gè)分配的新隊(duì)列創(chuàng)建一個(gè)消息拉取請求 pullRequest, 在消息拉取請求中保存一個(gè)處理隊(duì)列processQueue(隊(duì)列消費(fèi)快照),內(nèi)部是紅黑樹(TreeMap),用來保存拉取到的消息。

最后創(chuàng)建拉取消息請求列表,并將請求分發(fā)到消息拉取服務(wù),進(jìn)入拉取消息環(huán)節(jié)。

五、長輪詢

在負(fù)載均衡這一小節(jié),我們已經(jīng)知道負(fù)載均衡觸發(fā)了拉取消息的流程。

消費(fèi)者啟動(dòng)的時(shí)候,會(huì)創(chuàng)建一個(gè)拉取消息服務(wù) PullMessageService,它是一個(gè)單線程的服務(wù)。

核心流程如下:

1、負(fù)載均衡服務(wù)將消息拉取請求放入到拉取請求隊(duì)列 pullRequestQueue , 拉取消息服務(wù)從隊(duì)列中獲取拉取消息請求;

2、拉取消息服務(wù)向 Brorker 服務(wù)發(fā)送拉取請求 ,拉取請求的通訊模式是異步回調(diào)模式;

消費(fèi)者的拉取消息服務(wù)本身就是一個(gè)單線程,使用異步回調(diào)模式,發(fā)送拉取消息請求到 Broker 后,拉取消息線程并不會(huì)阻塞,可以繼續(xù)處理隊(duì)列 pullRequestQueue 中的其他拉取任務(wù)。

3、Broker 收到消費(fèi)者拉取消息請求后,從存儲中查詢出消息數(shù)據(jù),然后返回給消費(fèi)者;

4、消費(fèi)者的網(wǎng)絡(luò)通訊層會(huì)執(zhí)行拉取回調(diào)函數(shù)相關(guān)邏輯,首先會(huì)將消息數(shù)據(jù)存儲在隊(duì)列消費(fèi)快照 processQueue 里;

消費(fèi)快照使用紅黑樹 msgTreeMap存儲拉取服務(wù)拉取到的消息 。

5、回調(diào)函數(shù)將消費(fèi)請求提交到消息消費(fèi)服務(wù),而消息消費(fèi)服務(wù)會(huì)異步的消費(fèi)這些消息;

6、回調(diào)函數(shù)會(huì)將處理中隊(duì)列的拉取請放入到定時(shí)任務(wù)中;

7、定時(shí)任務(wù)再次將消息拉取請求放入到隊(duì)列 pullRequestQueue 中,形成了閉環(huán):負(fù)載均衡后的隊(duì)列總會(huì)有任務(wù)執(zhí)行拉取消息請求,不會(huì)中斷。

細(xì)心的同學(xué)肯定有疑問:既然消費(fèi)端是拉取消息,為什么是長輪詢呢?

雖然拉模式的主動(dòng)權(quán)在消費(fèi)者這一側(cè),但是缺點(diǎn)很明顯。

因?yàn)橄M(fèi)者并不知曉 Broker 端什么時(shí)候有新的消息 ,所以會(huì)不停地去 Broker 端拉取消息,但拉取頻率過高, Broker 端壓力就會(huì)很大,頻率過低則會(huì)導(dǎo)致消息延遲。

所以要想消費(fèi)消息的延遲低,服務(wù)端的推送必不可少。

下圖展示了 RocketMQ 如何通過長輪詢減小拉取消息的延遲。

核心流程如下:

1、Broker 端接收到消費(fèi)者的拉取消息請求后,拉取消息處理器開始處理請求,根據(jù)拉取請求查詢消息存儲 ;

2、從消息存儲中獲取消息數(shù)據(jù) ,若存在新消息 ,則將消息數(shù)據(jù)通過網(wǎng)絡(luò)返回給消費(fèi)者。若無新消息,則將拉取請求放入到拉取請求表 pullRequestTable。

3、長輪詢請求管理服務(wù)pullRequestHoldService 每隔 5 秒從拉取請求表中判斷拉取消息請求的隊(duì)列是否有新的消息。

判定標(biāo)準(zhǔn)是:拉取消息請求的偏移量是否小于當(dāng)前消費(fèi)隊(duì)列最大偏移量,如果條件成立則說明有新消息了。

若存在新的消息 , 長輪詢請求管理服務(wù)會(huì)觸發(fā)拉取消息處理器重新處理該拉取消息請求。

4、當(dāng) commitlog 中新增了新的消息,消息分發(fā)服務(wù)會(huì)構(gòu)建消費(fèi)文件和索引文件,并且會(huì)通知長輪詢請求管理服務(wù),觸發(fā)拉取消息處理器重新處理該拉取消息請求。

六、消費(fèi)消息

在拉取消息的流程里, Broker 端返回消息數(shù)據(jù),消費(fèi)者的通訊框架層會(huì)執(zhí)行回調(diào)函數(shù)。

回調(diào)線程會(huì)將數(shù)據(jù)存儲在隊(duì)列消費(fèi)快照 processQueue(內(nèi)部使用紅黑樹 msgTreeMap)里,然后將消息提交到消費(fèi)消息服務(wù),消費(fèi)消息服務(wù)會(huì)異步消費(fèi)這些消息。

消息消費(fèi)服務(wù)有兩種類型:并發(fā)消費(fèi)服務(wù)和順序消費(fèi)服務(wù)。

6.1 并發(fā)消費(fèi)

并發(fā)消費(fèi)是指消費(fèi)者將并發(fā)消費(fèi)消息,消費(fèi)的時(shí)候可能是無序的。

消費(fèi)消息并發(fā)服務(wù)啟動(dòng)后,會(huì)初始化三個(gè)組件:消費(fèi)線程池、清理過期消息定時(shí)任務(wù)、處理失敗消息定時(shí)任務(wù)。

核心流程如下:

0、通訊框架回調(diào)線程會(huì)將數(shù)據(jù)存儲在消費(fèi)快照里,然后將消息列表 msgList 提交到消費(fèi)消息服務(wù)

1、 消息列表 msgList 組裝成消費(fèi)對象

2、將消費(fèi)對象提交到消費(fèi)線程池

我們看到10 條消息被組裝成三個(gè)消費(fèi)請求對象,不同的消費(fèi)線程會(huì)執(zhí)行不同的消費(fèi)請求對象。

3、消費(fèi)線程執(zhí)行消息監(jiān)聽器

執(zhí)行完消費(fèi)監(jiān)聽器,會(huì)返回消費(fèi)結(jié)果。

4、處理異常消息

當(dāng)消費(fèi)異常時(shí),異常消息將重新發(fā)回 Broker 端的重試隊(duì)列( RocketMQ 會(huì)為每個(gè) topic 創(chuàng)建一個(gè)重試隊(duì)列,以 %RETRY% 開頭),達(dá)到重試時(shí)間后將消息投遞到重試隊(duì)列中進(jìn)行消費(fèi)重試。

我們將在重試機(jī)制這一節(jié)重點(diǎn)講解 RocketMQ 如何實(shí)現(xiàn)延遲消費(fèi)功能 。

假如異常的消息發(fā)送到 Broker 端失敗,則重新將這些失敗消息通過處理失敗消息定時(shí)任務(wù)重新提交到消息消費(fèi)服務(wù)。

5、更新本地消費(fèi)進(jìn)度

消費(fèi)者消費(fèi)一批消息完成之后,需要保存消費(fèi)進(jìn)度到進(jìn)度管理器的本地內(nèi)存。

首先我們會(huì)從隊(duì)列消費(fèi)快照 processQueue 中移除消息,返回消費(fèi)快照 msgTreeMap 第一個(gè)偏移量 ,然后調(diào)用消費(fèi)消息進(jìn)度管理器 offsetStore 更新消費(fèi)進(jìn)度。

待更新的偏移量是如何計(jì)算的呢?

場景1:快照中1001(消息1)到1010(消息10)消費(fèi)了,快照中沒有了消息,返回已消費(fèi)的消息最大偏移量 + 1 也就是1011。場景2:快照中1001(消息1)到1008(消息8)消費(fèi)了,快照中只剩下兩條消息了,返回最小的偏移量 1009。場景3:1001(消息1)在消費(fèi)對象中因?yàn)槟撤N原因一直沒有被消費(fèi),即使后面的消息1005-1010都消費(fèi)完成了,返回的最小偏移量是1001。

在場景3,RocketMQ 為了保證消息肯定被消費(fèi)成功,消費(fèi)進(jìn)度只能維持在1001(消息1),直到1001也被消費(fèi)完,本地的消費(fèi)進(jìn)度才會(huì)一下子更新到1011。

假設(shè)1001(消息1)還沒有消費(fèi)完成,消費(fèi)者實(shí)例突然退出(機(jī)器斷電,或者被 kill ),就存在重復(fù)消費(fèi)的風(fēng)險(xiǎn)。

因?yàn)殛?duì)列的消費(fèi)進(jìn)度還是維持在1001,當(dāng)隊(duì)列重新被分配給新的消費(fèi)者實(shí)例的時(shí)候,新的實(shí)例從 Broker 上拿到的消費(fèi)進(jìn)度還是維持在1001,這時(shí)候就會(huì)又從1001開始消費(fèi),1001-1010這批消息實(shí)際上已經(jīng)被消費(fèi)過還是會(huì)投遞一次。

所以業(yè)務(wù)必須要保證消息消費(fèi)的冪等性。

寫到這里,我們會(huì)有一個(gè)疑問:假設(shè)1001(消息1)因?yàn)榧渔i或者消費(fèi)監(jiān)聽器邏輯非常耗時(shí),導(dǎo)致極長時(shí)間沒有消費(fèi)完成,那么消費(fèi)進(jìn)度就會(huì)一直卡住 ,怎么解決呢 ?

RocketMQ 提供兩種方式一起配合解決:

拉取服務(wù)根據(jù)并發(fā)消費(fèi)間隔配置限流拉取消息服務(wù)在拉取消息時(shí)候,會(huì)判斷當(dāng)前隊(duì)列的 processQueue 消費(fèi)快照里消息的最大偏移量 - 消息的最小偏移量大于消費(fèi)并發(fā)間隔(2000)的時(shí)候 , 就會(huì)觸發(fā)流控 , 這樣就可以避免消費(fèi)者無限循環(huán)的拉取新的消息。清理過期消息消費(fèi)消息并發(fā)服務(wù)啟動(dòng)后,會(huì)定期掃描所有消費(fèi)的消息,若當(dāng)前時(shí)間減去開始消費(fèi)的時(shí)間大于消費(fèi)超時(shí)時(shí)間,首先會(huì)將過期消息發(fā)送 sendMessageBack 命令發(fā)送到 Broker ,然后從快照中刪除該消息。6.2 順序消費(fèi)

順序消息是指對于一個(gè)指定的 Topic ,消息嚴(yán)格按照先進(jìn)先出(FIFO)的原則進(jìn)行消息發(fā)布和消費(fèi),即先發(fā)布的消息先消費(fèi),后發(fā)布的消息后消費(fèi)。

順序消息分為分區(qū)順序消息和全局順序消息。

1、分區(qū)順序消息

對于指定的一個(gè) Topic ,所有消息根據(jù) Sharding Key 進(jìn)行區(qū)塊分區(qū),同一個(gè)分區(qū)內(nèi)的消息按照嚴(yán)格的先進(jìn)先出(FIFO)原則進(jìn)行發(fā)布和消費(fèi)。同一分區(qū)內(nèi)的消息保證順序,不同分區(qū)之間的消息順序不做要求。

適用場景:適用于性能要求高,以 Sharding Key 作為分區(qū)字段,在同一個(gè)區(qū)塊中嚴(yán)格地按照先進(jìn)先出(FIFO)原則進(jìn)行消息發(fā)布和消費(fèi)的場景。示例:電商的訂單創(chuàng)建,以訂單 ID 作為 Sharding Key ,那么同一個(gè)訂單相關(guān)的創(chuàng)建訂單消息、訂單支付消息、訂單退款消息、訂單物流消息都會(huì)按照發(fā)布的先后順序來消費(fèi)。2、全局順序消息

對于指定的一個(gè) Topic ,所有消息按照嚴(yán)格的先入先出(FIFO)的順序來發(fā)布和消費(fèi)。

適用場景:適用于性能要求不高,所有的消息嚴(yán)格按照 FIFO 原則來發(fā)布和消費(fèi)的場景。示例:在證券處理中,以人民幣兌換美元為 Topic,在價(jià)格相同的情況下,先出價(jià)者優(yōu)先處理,則可以按照 FIFO 的方式發(fā)布和消費(fèi)全局順序消息。

全局順序消息實(shí)際上是一種特殊的分區(qū)順序消息,即 Topic 中只有一個(gè)分區(qū),因此全局順序和分區(qū)順序的實(shí)現(xiàn)原理相同。

因?yàn)榉謪^(qū)順序消息有多個(gè)分區(qū),所以分區(qū)順序消息比全局順序消息的并發(fā)度和性能更高。

消息的順序需要由兩個(gè)階段保證:

消息發(fā)送如上圖所示,A1、B1、A2、A3、B2、B3 是訂單 A 和訂單 B 的消息產(chǎn)生的順序,業(yè)務(wù)上要求同一訂單的消息保持順序,例如訂單 A 的消息發(fā)送和消費(fèi)都按照 A1、A2、A3 的順序。如果是普通消息,訂單A 的消息可能會(huì)被輪詢發(fā)送到不同的隊(duì)列中,不同隊(duì)列的消息將無法保持順序,而順序消息發(fā)送時(shí) RocketMQ 支持將 Sharding Key 相同(例如同一訂單號)的消息序路由到同一個(gè)隊(duì)列中。下圖是生產(chǎn)者發(fā)送順序消息的封裝,原理是發(fā)送消息時(shí),實(shí)現(xiàn) MessageQueueSelector 接口,根據(jù) Sharding Key 使用 Hash 取模法來選擇待發(fā)送的隊(duì)列。生產(chǎn)者順序發(fā)送消息封裝消息消費(fèi)消費(fèi)者消費(fèi)消息時(shí),需要保證單線程消費(fèi)每個(gè)隊(duì)列的消息數(shù)據(jù),從而實(shí)現(xiàn)消費(fèi)順序和發(fā)布順序的一致。

順序消費(fèi)服務(wù)的類是ConsumeMessageOrderlyService,在負(fù)載均衡階段,并發(fā)消費(fèi)和順序消費(fèi)并沒有什么大的差別。

最大的差別在于:順序消費(fèi)會(huì)向 Borker 申請鎖。消費(fèi)者根據(jù)分配的隊(duì)列 messageQueue ,向 Borker 申請鎖 ,如果申請成功,則會(huì)拉取消息,如果失敗,則定時(shí)任務(wù)每隔20秒會(huì)重新嘗試。

順序消費(fèi)核心流程如下:

1、 組裝成消費(fèi)對象

2、 將請求對象提交到消費(fèi)線程池

和并發(fā)消費(fèi)不同的是,這里的消費(fèi)請求包含消費(fèi)快照 processQueue ,消息隊(duì)列 messageQueue 兩個(gè)對象,并不對消息列表做任何處理。

3、 消費(fèi)線程內(nèi),對消費(fèi)隊(duì)列加鎖

順序消費(fèi)也是通過線程池消費(fèi)的,synchronized 鎖用來保證同一時(shí)刻對于同一個(gè)隊(duì)列只有一個(gè)線程去消費(fèi)它

4、 從消費(fèi)快照中取得待消費(fèi)的消息列表

消費(fèi)快照 processQueue 對象里,創(chuàng)建了一個(gè)紅黑樹對象 consumingMsgOrderlyTreeMap 用于臨時(shí)存儲的待消費(fèi)的消息。

5、 執(zhí)行消息監(jiān)聽器

消費(fèi)快照的消費(fèi)鎖 consumeLock的作用是:防止負(fù)載均衡線程把當(dāng)前消費(fèi)的 MessageQueue 對象移除掉。

6、 處理消費(fèi)結(jié)果

消費(fèi)成功時(shí),首先計(jì)算需要提交的偏移量,然后更新本地消費(fèi)進(jìn)度。

消費(fèi)失敗時(shí),分兩種場景:

假如已消費(fèi)次數(shù)小于最大重試次數(shù),則將對象 consumingMsgOrderlyTreeMap 中臨時(shí)存儲待消費(fèi)的消息,重新加入到消費(fèi)快照紅黑樹 msgTreeMap中,然后使用定時(shí)任務(wù)嘗試重新消費(fèi)。假如已消費(fèi)次數(shù)大于等于最大重試次數(shù),則將失敗消息發(fā)送到 Broker ,Broker 接收到消息后,會(huì)加入到死信隊(duì)列里 , 最后計(jì)算需要提交的偏移量,然后更新本地消費(fèi)進(jìn)度。

我們做一個(gè)關(guān)于順序消費(fèi)的總結(jié) :

順序消費(fèi)需要由兩個(gè)階段消息發(fā)送和消息消費(fèi)協(xié)同配合,底層支撐依靠的是 RocketMQ 的存儲模型;順序消費(fèi)服務(wù)啟動(dòng)后,隊(duì)列的數(shù)據(jù)都會(huì)被消費(fèi)者實(shí)例單線程的執(zhí)行消費(fèi);假如消費(fèi)者擴(kuò)容,消費(fèi)者重啟,或者 Broker 宕機(jī) ,順序消費(fèi)也會(huì)有一定幾率較短時(shí)間內(nèi)亂序,所以消費(fèi)者的業(yè)務(wù)邏輯還是要保障冪等。七、保存進(jìn)度

RocketMQ 消費(fèi)者消費(fèi)完一批數(shù)據(jù)后, 會(huì)將隊(duì)列的進(jìn)度保存在本地內(nèi)存,但還需要將隊(duì)列的消費(fèi)進(jìn)度持久化。

1、 集群模式

集群模式下,分兩種場景:

拉取消息服務(wù)會(huì)在拉取消息時(shí),攜帶該隊(duì)列的消費(fèi)進(jìn)度,提交給 Broker 的拉取消息處理器。消費(fèi)者定時(shí)任務(wù),每隔5秒將本地緩存中的消費(fèi)進(jìn)度提交到 Broker 的消費(fèi)者管理處理器。

Broker 的這兩個(gè)處理器都調(diào)用消費(fèi)者進(jìn)度管理器 consumerOffsetManager 的 commitOffset 方法,定時(shí)任務(wù)異步將消費(fèi)進(jìn)度持久化到消費(fèi)進(jìn)度文件 consumerOffset.json 中。

2、 廣播模式

廣播模式消費(fèi)進(jìn)度存儲在消費(fèi)者本地,定時(shí)任務(wù)每隔 5 秒通過 LocalFileOffsetStore 持久化到本地文件offsets.json,數(shù)據(jù)格式為MessageQueue:Offset。

廣播模式下,消費(fèi)進(jìn)度和消費(fèi)組沒有關(guān)系,本地文件offsets.json存儲在配置的目錄,文件中包含訂閱主題中所有的隊(duì)列以及隊(duì)列的消費(fèi)進(jìn)度。

八、重試機(jī)制

集群消費(fèi)下,重試機(jī)制的本質(zhì)是 RocketMQ 的延遲消息功能。

消費(fèi)消息失敗后,消費(fèi)者實(shí)例會(huì)通過CONSUMER_SEND_MSG_BACK請求,將失敗消息發(fā)回到 Broker 端。

Broker 端會(huì)為每個(gè) topic 創(chuàng)建一個(gè)重試隊(duì)列,隊(duì)列名稱是:%RETRY% + 消費(fèi)者組名 ,達(dá)到重試時(shí)間后將消息投遞到重試隊(duì)列中進(jìn)行消費(fèi)重試(消費(fèi)者組會(huì)自動(dòng)訂閱重試 Topic)。最多重試消費(fèi) 16 次,重試的時(shí)間間隔逐漸變長,若達(dá)到最大重試次數(shù)后消息還沒有成功被消費(fèi),則消息將被投遞至死信隊(duì)列。

第幾次重試

與上次重試的間隔時(shí)間

第幾次重試

與上次重試的間隔時(shí)間

1

10 秒

9

7 分鐘

2

30 秒

10

8 分鐘

3

1 分鐘

11

9 分鐘

4

2 分鐘

12

10 分鐘

5

3 分鐘

13

20 分鐘

6

4 分鐘

14

30 分鐘

7

5 分鐘

15

1 小時(shí)

8

6 分鐘

16

2 小時(shí)

開源 RocketMQ 4.X 支持延遲消息,默認(rèn)支持18 個(gè) level 的延遲消息,這是通過 broker 端的 messageDelayLevel 配置項(xiàng)確定的,如下:

Broker 在啟動(dòng)時(shí),內(nèi)部會(huì)創(chuàng)建一個(gè)內(nèi)部主題:SCHEDULE_TOPIC_XXXX,根據(jù)延遲 level 的個(gè)數(shù),創(chuàng)建對應(yīng)數(shù)量的隊(duì)列,也就是說18個(gè) level 對應(yīng)了18個(gè)隊(duì)列。

我們先梳理下延遲消息的實(shí)現(xiàn)機(jī)制。

1、生產(chǎn)者發(fā)送延遲消息

Message msg = new Message();msg.setTopic("TopicA");msg.setTags("Tag");msg.setBody("this is a delay message".getBytes());//設(shè)置延遲level為5,對應(yīng)延遲1分鐘msg.setDelayTimeLevel(5);producer.send(msg);

2、Broker端存儲延遲消息

延遲消息在 RocketMQ Broker 端的流轉(zhuǎn)如下圖所示:

第一步:修改消息 Topic 名稱和隊(duì)列信息

Broker 端接收到生產(chǎn)者的寫入消息請求后,首先都會(huì)將消息寫到 commitlog 中。假如是正常非延遲消息,MessageStore 會(huì)根據(jù)消息中的 Topic 信息和隊(duì)列信息,將其轉(zhuǎn)發(fā)到目標(biāo) Topic 的指定隊(duì)列 consumequeue 中。

但由于消息一旦存儲到 consumequeue 中,消費(fèi)者就能消費(fèi)到,而延遲消息不能被立即消費(fèi),所以 RocketMQ 將 Topic 的名稱修改為SCHEDULE_TOPIC_XXXX,并根據(jù)延遲級別確定要投遞到哪個(gè)隊(duì)列下。

同時(shí),還會(huì)將消息原來要發(fā)送到的目標(biāo) Topic 和隊(duì)列信息存儲到消息的屬性中。

第二步:構(gòu)建 consumequeue 文件時(shí),計(jì)算并存儲投遞時(shí)間

上圖是 consumequeue 文件一條消息的格式,最后 8 個(gè)字節(jié)存儲 Tag 的哈希值,此時(shí)存儲消息的投遞時(shí)間。

第三步:定時(shí)調(diào)度服務(wù)啟動(dòng)

ScheduleMessageService 類是一個(gè)定時(shí)調(diào)度服務(wù),讀取 SCHEDULE_TOPIC_XXXX 隊(duì)列的消息,并將消息投遞到目標(biāo) Topic 中。

定時(shí)調(diào)度服務(wù)啟動(dòng)時(shí),創(chuàng)建一個(gè)定時(shí)調(diào)度線程池 ,并根據(jù)延遲級別的個(gè)數(shù),啟動(dòng)對應(yīng)數(shù)量的 HandlePutResultTask ,每個(gè) HandlePutResultTask 負(fù)責(zé)一個(gè)延遲級別的消費(fèi)與投遞。

第四步:投遞時(shí)間到了,將消息數(shù)據(jù)重新寫入到 commitlog

消息到期后,需要投遞到目標(biāo) Topic 。第一步已經(jīng)記錄了原來的 Topic 和隊(duì)列信息,這里需要重新設(shè)置,再存儲到 commitlog 中。

第五步:將消息投遞到目標(biāo) Topic 中

Broker 端的后臺服務(wù)線程會(huì)不停地分發(fā)請求并異步構(gòu)建 consumequeue(消費(fèi)文件)和 indexfile(索引文件)。因此消息會(huì)直接投遞到目標(biāo) Topic 的 consumequeue 中,之后消費(fèi)者就可以消費(fèi)到這條消息。

回顧了延遲消息的機(jī)制,消費(fèi)消息失敗后,消費(fèi)者實(shí)例會(huì)通過CONSUMER_SEND_MSG_BACK請求,將失敗消息發(fā)回到 Broker 端。

Broker 端 SendMessageProcessor 處理器會(huì)調(diào)用 asyncConsumerSendMsgBack 方法。

首先判斷消息的當(dāng)前重試次數(shù)是否大于等于最大重試次數(shù),如果達(dá)到最大重試次數(shù),或者配置的重試級別小于0,則重新創(chuàng)建 Topic ,規(guī)則是%DLQ% + consumerGroup,后續(xù)處理消息發(fā)送到死信隊(duì)列。

正常的消息會(huì)進(jìn)入 else 分支,對于首次重試的消息,默認(rèn)的 delayLevel 是 0 ,RocketMQ 會(huì)將 delayLevel + 3,也就是加到 3 ,這就是說,如果沒有顯示的配置延時(shí)級別,消息消費(fèi)重試首次,是延遲了第三個(gè)級別發(fā)起的重試,也就是距離首次發(fā)送 10s 后重試,其主題的默認(rèn)規(guī)則是%RETRY% + consumerGroup。

當(dāng)延時(shí)級別設(shè)置完成,刷新消息的重試次數(shù)為當(dāng)前次數(shù)加 1 ,Broker 端將該消息刷盤,邏輯如下:

延遲消息寫入到 commitlog 里 ,這里其實(shí)和延遲消息機(jī)制的第一步類似,后面按照延遲消息機(jī)制的流程執(zhí)行即可(第二步到第六步)。

九、總結(jié)

下圖展示了集群模式下消費(fèi)者并發(fā)消費(fèi)流程 :

核心流程如下:

消費(fèi)者啟動(dòng)后,觸發(fā)負(fù)載均衡服務(wù) ,負(fù)載均衡服務(wù)為消費(fèi)者實(shí)例分配對應(yīng)的隊(duì)列 ;分配完隊(duì)列后,負(fù)載均衡服務(wù)會(huì)為每個(gè)分配的新隊(duì)列創(chuàng)建一個(gè)消息拉取請求 pullRequest, 拉取請求保存一個(gè)處理隊(duì)列processQueue,內(nèi)部是紅黑樹(TreeMap),用來保存拉取到的消息 ;拉取消息服務(wù)單線程從拉取請求隊(duì)列 pullRequestQueue中彈出拉取消息,執(zhí)行拉取任務(wù) ,拉取請求是異步回調(diào)模式,將拉取到的消息放入到處理隊(duì)列;拉取請求在一次拉取消息完成之后會(huì)復(fù)用,重新被放入拉取請求隊(duì)列pullRequestQueue中 ;拉取完成后,調(diào)用消費(fèi)消息服務(wù) consumeMessageService的 submitConsumeRequest方法 ,消費(fèi)消息服務(wù)內(nèi)部有一個(gè)消費(fèi)線程池;消費(fèi)線程池的消費(fèi)線程從消費(fèi)任務(wù)隊(duì)列中獲取消費(fèi)請求,執(zhí)行消費(fèi)監(jiān)聽器 listener.consumeMessage;消費(fèi)完成后,若消費(fèi)成功,則更新偏移量updateOffset,先更新到內(nèi)存offsetTable,定時(shí)上報(bào)到 Broker ;若消費(fèi)失敗,則將失敗消費(fèi)發(fā)送到 Broker 。Broker 端接收到請求后, 調(diào)用消費(fèi)進(jìn)度管理器的commitOffset方法修改內(nèi)存的消費(fèi)進(jìn)度,定時(shí)刷盤到 consumerOffset.json。

RocketMQ 4.X 的消費(fèi)邏輯有兩個(gè)非常明顯的特點(diǎn):

客戶端代碼邏輯較重。假如要支持一種新的編程語言,那么客戶端就必須實(shí)現(xiàn)完整的負(fù)載均衡邏輯,此外還需要實(shí)現(xiàn)拉消息、位點(diǎn)管理、消費(fèi)失敗后將消息發(fā)回 Broker 重試等邏輯。這給多語言客戶端的支持造成很大的阻礙。保證冪等非常重要。當(dāng)客戶端升級或者下線時(shí),或者 Broker 宕機(jī),都要進(jìn)行負(fù)載均衡操作,可能造成消息堆積,同時(shí)有一定幾率造成重復(fù)消費(fèi)。參考資料:

1、RocketMQ 4.9.4 Github 文檔

https://github.com/apache/rocketmq/tree/rocketmq-all-4.9.4/docs

2、RocketMQ 技術(shù)內(nèi)幕

3、消息隊(duì)列核心知識點(diǎn)

https://mp.weixin.qq.com/s/v7_ih9X5mG3X4E4ecfgYXA

4、消息ACK機(jī)制及消費(fèi)進(jìn)度管理

https://zhuanlan.zhihu.com/p/25265380

關(guān)鍵詞:

相關(guān)新聞

Copyright 2015-2020   三好網(wǎng)  版權(quán)所有 聯(lián)系郵箱:435 22 640@qq.com  備案號: 京ICP備2022022245號-21
99国产精品久久99久久久| 亚洲最大先锋资源采集站| 国产毛片特级Av片| 蜜桃tv一区二区三区| 丰满少妇_区二区三区| 女生抠逼自慰啊啊啊啊啊啊啊下载| 在线视频国产精品欧美| 人妻少妇精品二三区| 在线视频自拍第三页| 国产91精品福利系列| 台湾18禁久久久久久久激情视频| 国产一区二区三区四区精| 亚洲成人,国产精品| 日韩最近中文在线观看| 最新国产精品拍在线观看| 亚洲全国精品女人久久久| 日本东京热视频欧美视频| 亚洲最强的25个城市| 亚洲色视频在线播放网站| 91九色91在线视频| 中文字幕欧美人妻在线.| 亚洲18片综合国产av| 97人妻av人人澡人人爽| 麻豆国产91制片厂| 久久久久久免费观看av| 得得爱在线视频观看| 美女张开腿给男人桶爽的软件| 国产激情视频在线观看的| 港台美女明星av天堂| 黑人侵犯人妻森泽佳奈| 日本少妇精品免费视频| 久久久亚洲熟女一区二区| 成人大片男人的天堂| 中文字字幕在线精品乱码| 久久久久九九九九九12| 日本美女爱爱视频网站| 亚洲成人 国产精品| 91偷拍被偷拍在线播放| av网页免费在线观看| 亚洲一区视频中文字幕在线播放 | 91偷拍被偷拍在线播放| 国色天香一二三期区别大象| 99在线视频精品观看高| 岳的大肥屁熟妇五十路| 又粗又长又硬又黄又爽| 91久久久精品成人国产| 人人妻人人爽人人爽欧美一区| 欧美黄色一区二区三区视频| 亚洲av毛片一区二区三区网| 国产漂亮白嫩美女在线图片| 国产高清在线观看av| 最新国产精品久久精品app| 在线看的免费网站黄| 青青青在线视频观看97| 老熟女xxxⅹhd老熟女性| 97视频538在线观看| 亚洲色大WWW永久网站| 在线免费观看欧美小视频 | 国产视频成人自拍蝌蚪视频 | 国产在线小视频一区二区| 亚洲av日韩久久网站| 我爱搞在线观看视频| 91精品久久久久久久久99蜜臀| 亚洲最大的自拍偷拍网| 日本少妇精品免费视频| 伦理在线观看未删减中文字幕| 黄色av网址在线播放| 一区二区在线观看视频网站| 日韩成人精品久久久免费看| 日韩一级欧美一级片| 亚洲欧洲无码一区2区无码| 黑人大巨屌操美女逼| 天天操天天搞天天操| 涩涩黄片在线免费观看| av福利免费体验观看| 台湾18禁久久久久久久激情视频| 午夜野花视频在线观看| 无码人妻丰满熟妇区五路| 伊人网在线观看 视频一区| 9662av在线视频| 国产av啊啊啊啊啊啊啊| 亚洲情色777中文字幕| 性感美女人妻久久久| 中文字幕 人妻 熟女| 操死你美女在线视频| 亚洲精品乱码久久久久app| 亚洲乱熟女一区二区三区山| 天海翼亚洲一区在线观看| 麻豆出品视频在线观看| 亚洲免费午夜污福利| 国产激情一区二区视频| 人妻激情综合久久久久蜜桃| 91九色人妻在线播放| 午夜在线观看一级毛| 国产欧美福利在线观看| 先锋人妻啪啪中文字幕| 人人妻人人爽人人摸| 黑鸡巴肏少妇逼视频| 午夜精品小视频在线播放| 手机看电影一区二区三区| 夜夜躁av麻豆男| 中文字幕在线免费观看成人| 天天曰天天摸天天爽| 外国美女舔男人坤坤| 国内销魂老女人老泬| 18岁禁一二三区免费体验| 美女把腿张开给男的捅| 激情久久在线免费观看视频| 美利坚合众国av天堂| 日本有码精品一区二区三区| 日本一道中文字幕99| 欧美一区二区三区视频看| 免费看一级高潮喷水片 | 人妻熟女 亚洲 一页二页 | 天堂av在线最新地址| 老鸭窝在线毛片观看免费播放| 九九九九九久久久国产| 午夜92福利1000| 欧美一区二区三区视频看| 午夜福利片无码10000| 亚洲综合一区二区三区四区| 亚洲精品乱码久久久久app | 少妇被中出一区二区| 两个奶被揉得又硬又翘怎么回事| 欧美第一激情综合网欧美激情| 美利坚合众国av天堂| 国产成人91色精品免费看片| av无限看熟女人妻另类av| 538欧美在线观看一区二区三区 | 亚欧洲乱码视频一二三区| 国产人妻熟女ⅹxx丝袜| jandara在线观看| 99国产精品国产精品毛片19| 最新日韩中文字幕啪啪啪| 可以直接看av网站| 最新中文字幕久久久久| 亚洲欧美另类丝袜另类自拍| 大成色亚洲一二三区| 涩涩黄片在线免费观看| 婷婷色综合五月天视频| 黄在线看片免费人成视频| 伊人久久综合国产精品| 鸡巴插进美女的嫩小穴视频| 香港日本台湾经典三级| 亚洲熟女在线免费观看| 99精品视频在线在线观看| 顶级欧美色妇xxxx| 亚洲欧美成人激情在线| 一区二区三区国产在线成人av| 日韩A级毛片免费视频| 国产黑色丝袜 在线日韩欧美| 欧美亚洲愉拍一区二区三区| 最新日韩av电影在线播放| 91亚洲精品久久蜜桃| 黄色av日韩在线观看| 人妻熟女 亚洲 一页二页| 精品欧美乱码久久久| 最新国产精品综合网高清| 538欧美在线观看一区二区三区| 欧美国产精品久久久免费| 360偷拍蜜桃臀69式| 国产福利三级在线观看| 奇米网首页神马久久| 中文字幕亚洲乱码精品无限| 天天干夜夜撸天天操| 亚洲一区二区精品在线播放| 欧美黑人性猛交小矮人| 精品日本少妇久久久| 国产高清视频www夜色资源| 中文字幕熟女人妻一区| 在线能看视频你懂的| 九一精品人妻一区二区三区| 午夜野花视频在线观看| 亚洲熟女在线免费观看| 日韩欧美黄色免费网站| 外国美女舔男人坤坤| 91 精品视频在线看| 91九色国产在线视频| julia人妻av一区二区三区| 欧美日韩精品aaa| 午夜一区二区三区视频在线观看| 干逼又爽又黄又免费的视频| av日韩视频在线观看| av中文字幕国产精品| 天天插天天操天天射天天干| 美女露阴道让男人捅| 精产国品一二三77777| 免费绝清毛片a在线播放| 久久精品四虎夜夜拍拍拍| 999久久久人妻精品一区| 91精品国产人妻麻豆| 精品欧美黑人一区二区三区| 国产毛片特级Av片| 亚洲高清一区二区三区久久| 国际日韩日韩日韩日韩日韩 | www,日韩av,com| 色哟哟亚洲乱码国产乱码精品精| 熟女人妻少妇一区二区| 手机看片福利一区二区三区四区| 99久久国产精品免费热| 无人区一码二码三码区别在哪 | www国产亚洲精品久久久| 大尺度av毛片在线网址| 上床啪啪啪免费视频| avtt中文字幕手机版| 久久久久久久岛国免费观看 | 日韩在线 中文字幕| 黑人和日本人av一区二区| 久久99国产中文丝袜| 亚洲熟妇在线视频观看| 在线免费观看欧美小视频| 欧美色区国产日韩亚洲区| 91人妻人人爽色啊啊啊| 欧美最新一区二区三区| 久久久久久免费观看av| 亚洲第一成年偷拍视频| 日韩人妻中文字幕二区| 九热精品视频在线观看| 国产视频成人自拍蝌蚪视频| 一区二区三区四区影片| 福利视频免费在线播放| 国内销魂老女人老泬| 最新国产午夜激情视频| 亚洲在线观看中文字幕av| 久久午夜免费鲁丝片| 伊人网在线免费观看| 天天干天天操天天日天天日| 激情九月天在线视频| 18福利视频在线观看| 天天曰天天摸天天爽| 91精品夜夜夜一区二区蜜桃| 在线免费观看a视频免费| 天天早上头和脸出汗是怎么办 | www,日韩av,com| 日韩成人免费观看电影| 丝袜美腿日韩av一区| 久久人妻诱惑我视频| 美国伦理片午夜理论片| 亚洲成a人片777777张柏芝| 亚洲无码专区中文字幕专区| 欧美性受黑人猛交裸体视频| 自拍偷拍色图亚洲天堂| 在线看日韩av不卡| 日韩人妻中文字幕区| 激情久久在线免费观看视频| 91色乱一区二区三区| 国产精品福利久久久久| 亚洲综合成人精品成人精品| 另类欧美激情校园春色| 天天日夜夜操人人爽| 中文字幕国产一区在线视频| 久久热在线免费观看| 大屁股熟女一区二区视频| 一区二区在线观看视频观看| 亚洲中文字幕在线视频观看二区| 国产大桥未久一区二区| 中文字幕亚洲乱码精品无限| 亚洲精品1卡2卡3卡| 亚洲 综合 欧美 一区| 新亚洲天堂男子av| 伊人精品久久一区二区| 先锋人妻啪啪中文字幕| 东北老女人熟女啪啪视频| 亚洲精品国品乱码久久久久| av中文字幕国产精品| 国产精品久久人人添| 99 re国产精品| 核xp工厂精品久久亚洲| 60路70路日本熟妇| av在线中文字幕在线| 亚洲午夜国产末满十八岁勿进网站| 日韩国产欧美一区二区三区粉嫩| caopeng97在线观看视频| 久久久久久久久久久久久国产| 国产精品久久久久久成人久| 欧美最新一区二区三区| 熟女人妻aⅴ一区二区三| 午夜美女福利视频在线| 核xp工厂精品久久亚洲| 中文字幕国产一区在线视频| 羞羞漫画无限免费观看秋蝉| 男女69视频在线观看免费| 中国特黄色性生活片| 在线观看免费啪啪啪| 午夜国产免费视频亚洲| 亚洲成人偷拍自拍在线| 青青操天堂在线观看视频| 免费在线小视频你懂的| 亚洲美女色www色| 天天综合久久无人区| 猫咪亚洲中文在线中文字幕| 在线国产精品欧美| 全球高清中文字幕av| 亚洲成人自拍图片网站| 大香蕉在线欧美在线视频| 一二三四区国产在线观看| 精品久久久久久久久久久久久| 性感美女极品18禁网站在线| 国产资源在线观看二区| 欧美成人性生活视频播放| 欧美插插插插插插| 亚成区一区二区人妻熟女| 午夜久久久久欠久久久久| 丰满人妻被猛烈进入中文字幕| 欧美精品999不卡| 99福利一区二区视频| 青青青在线观看国产| 日本国产亚洲欧美色综合| 免费高清av一区二区| 我爱搞在线观看视频| 国产白丝一区二区三区av| 性感美女极品18禁网站在线| 妈妈的朋友中字在线免费观看| 美女把腿张开给男的捅| 18禁男女啪啪啪无遮挡| 97视频人人爱麻豆| 日本国产亚洲欧美色综合| 天天摸天天干夜夜操| 亚洲一区在线视频观看地址| 夜夜骚av一二三区| 青青青在线视频免费播放| 九色porny91国产| 亚洲熟妇在线视频观看| 日日躁夜夜躁狠狠操| 人妻系列级片在线观看视频| 国产精品中文字幕丝袜| 成人午夜高清福利视频| 亚洲精品1卡2卡3卡| 开心激情五月天作爱片| 欧美一区二区三区爽爽| 亚洲va999天堂va| 中文字幕 中文字幕 亚洲| 人妻视频网站快射视频网站| 自拍偷拍亚洲综合第一页| 日韩一级视频一区二区三区| 丝袜美腿日韩av一区| 中文字幕av人妻一区二区三区 | 91精品久久久久久久久99蜜臀| 欧美日韩高清片在线观看| 日韩少妇免费在线播放| 亚洲另类欧美综合久久| 欧美男女一区二区三区| 白白色在线免费视频发布视频| 欧美熟女xx00视频| 精品国产污污污污免费观看| 狂操鸡巴小骚逼视频免费观看| 性色蜜桃臀x88av天美传媒| 亚洲欧美成人午夜一区二区| 久久久久久免费观看av| 5566熟女人妻人妻| 青青操91美女国产| 日本五六十路熟女视频| 欧美日韩综合精品无人区| 国产视频成人一区二区| 成熟了的熟妇毛茸茸| 92午夜免费福利视频www| 亚洲熟妇丰满多毛xxxx网站| 日本黄页在线观看视频| 蜜臀一区二区日韩美女少妇视频 | 国内精品一区二区2021在线| 51vv精品视频在线观看| 制服丝袜中文字幕熟女人妻| 视频免费在线观看网站| 色网站在线观看免费| 午夜福利国产精品久久久久| 午夜福利在线不卡视频| 污网址在线观看视频| 黑人侵犯人妻森泽佳奈| 国产精品午夜无码AV体验区| 中文字幕中文字幕在线中…一区| 久久99热精品免费观看视| 免费看超污视频在线观看| 日韩男女视频网站在线观看| 久久久久性感美女偷拍视频| 亚洲午夜高清在线观看| 婷婷一区二区三区五月丁| 欧美性感美女热舞视频| 午夜久久人妻一级内射av网址| 顶级欧美色妇4khd| 国产激情一区二区视频| 精品不卡一区二区三区| 9999久久久久老熟妇二区| 玖辛奈18禁同人污本子| 中文字幕中文字幕在线中…一区 | 免费在线观看视频啪啪| 97人妻av人人澡人人爽| 久久99国产中文丝袜| 成人精品影视一区二区| 中出小骚货在线观看| 亚洲av手机免费在线| 大陆中文字幕视频在线| 果冻麻豆一区二区三区| 精产国品一二三77777| 9999久久久久老熟妇二区| 在线中文字幕人妻av| 亚洲成人自拍图片网站| 欧美成人一二三在线网| 亚洲成人三级黄色片| 亚洲第一区av中文字幕| 乱子伦国产一区二区三区| 亚洲AV无码久久精品国产一区老| 精品国产久久久久午夜精品av| 国产av啊啊啊啊啊啊啊| 69久久夜色精品国产69乱电影| 亚洲欧美精品日韩偷拍| 欧美大胆a级视频秒播| 国产剧情av在线免费观看| 亚洲天堂色综合久久| 九九热在线精品播放| 欧美日韩高清片在线观看| 伊人久久综合国产精品| 操死你美女在线视频| 九一精品人妻一区二区三区| 日本免费人爱做视频在线观看不卡| 老色鬼精品视频在线观看播放| 亚洲男人天堂最新网址大全| 麻豆国产精品777777在| 69国产在线视频网站| 精品欧美乱码久久久| 亚洲男人天堂最新网址大全 | 亚洲熟女在线免费观看| 色噜噜噜噜色噜噜色合久一| 不卡高清一区二区三区| 免费看超污视频在线观看| 欧美日韩黄片免费在线观看| 亚洲欧美日韩电影一区| 亚洲午夜熟女在线观看| 亚洲美女午夜激情视频在线观看| 久久精品四虎夜夜拍拍拍| 97精品久久久久久无码人妻| 国产高清在线观看av| 男女69视频在线观看免费| 中文字幕精品人妻久久久久| 亚洲少妇视频在线观看| 亚洲gay视频在线观看| 夫亡人妻被强干中文字幕| 国产精品蝌蚪自拍视频| 亚洲精品中文字幕手机在线免费看| 亚洲无人区乱码中文字幕一区| 国产亚洲综合5388| 女人扒开逼让男人操| 日本不卡视频一二三区| 男人的天堂aⅴ在线| 不卡高清一区二区三区| 丰满少妇人妻一区二区三区蜜桃| 2021国产在线视频| 日本少妇人妻凌辱在线| 精品美女洗澡一区二区| 熟女俱乐部jukujoclub| 国产亚洲精品啪啪视频| 97成人老师在线视频| 漂亮人妻口爆久久精品| 91色哟哟视频在线观看| 亚洲黄色成人一级片| 久久久久国产精品二区| 中文字幕亚洲乱码精品无限| 二十四小时日本高清在线观看 | 裸日本资源在线午夜| 日韩女同与成人用品电影免费看| 亚洲熟女一区二区六区| 久久国产精品久精国产爱| 神马午夜久久电影网| 欧美第一激情综合网欧美激情| 午夜国产免费视频亚洲| 国产精品国产三级在线高清观看| 强乱人妻中文字幕日本| av在线免费在线观看| 熟女俱乐部jukujoclub| 亚洲一区二区三区四区入口| 99精品久久精品一区二区| 日韩加勒比精品在线看| 国产91黑丝小视频在线观看| 国产高清视频www夜色资源| 91精品国产成人久久久久久| 亚洲熟女人妻自拍在线视频| 亚洲精品综合欧美精品综合| 中国特黄色性生活片| 国产中年夫妇激情高潮| 99久久国产精品免费热| 4438x亚洲最大的成人| 黑川堇人妻88av| 日日夜夜免费视频精品| 欧美日本在线免费视频| 高潮喷水在线视频观看| 99精品视频在线在线观看| 欧美熟女xx00视频| 中文字幕日韩首页欧美在线激情| 最新国产精品久久精品app| 欧美性受黑人猛交裸体视频| 高清av在线婷一区二区色日韩| 天天插天天干天天狠| 夜夜躁av麻豆男| 九十九步都是爱最后一步是尊严| 91精产国品一二三产区区别网站 | 中文字幕人妻一区色偷偷久久| 成人免费电影二区三区| 69精品人妻久久久久久久久久久 | 首页欧美日韩中文字幕| 国产经典精品欧美日韩| 91人妻人人做人人爽高清| 成年男女免费视频网站无毒| 亚洲精品国品乱码久久久久| 天天干天天日天天弄| 老司机伊人99久久精品| 夜夜躁av麻豆男| 熟女一区二区视频在线 | 操烂你的骚逼天天欧美| 国产精品久久人人添| 国产黑色丝袜 在线日韩欧美| 国产在线观看av一区| 国产肥胖熟女又色又爽免费视频| 久久久视频在线播放| 九色porny91国产| 精产国品一二三产品区别97| 松本菜奈实最新av在线| 中文字幕日韩人妻在线三区| 日韩成人精品久久久免费看| 熟女人妻精品视频一区| 蜜乳av一区二区三区免费观看| 欧美区日本区国产区| 欧洲精品在线免费观看| 午夜在线成人免费电影| 亚洲成a人77777| 欧美丝袜亚洲国产日韩| 天天弄天天草天天日天天| 欧美国产精品久久久免费| 欧美黄色性视频网站| 天天综合久久无人区| 丰满放荡熟妇在线播放| 99精品视频在线在线观看| 日本亚洲精品视频在线观看| 美女把腿张开给男的捅| 日韩女同与成人用品电影免费看| 国产 亚洲 欧美 自拍| 啊不行啊操逼好爽大鸡吧视频 | 亚洲第一页欧美第一页| 内地精品毛片在线观看| 55夜色66夜色亚洲精品| 亚洲国产精品自产拍在线观看| 日本一道中文字幕99| 天堂av国产av伦理av| 日本福利片在线播放| 亚洲春色av中文字幕| 一区二区三区四区久久久久韩日 | 日本少妇三级交换做爰做| 亚洲一区视频中文字幕在线播放| 亚洲色大WWW永久网站| 亚洲欧美韩国日本一区二区| 美女福利网站在线播放| 九九六视频,这里只有精品| 天堂av国产av伦理av| 青青操天堂在线观看视频| 18在线观看免费观看| 日本免费人爱做视频在线观看不卡| 亚洲欧美另类校园春色| 天天操天天干加勒比久久| 激情九月天在线视频| 特级aaaaa黄色片| 日韩一级视频一区二区三区| 大香蕉在线欧美在线视频| 亚洲国产电影的一区| 懂色av之国产精品| 亚洲天堂男人的天堂| 欧美黄色一区二区三区视频| 在线观看视频免费一区二区三区| 99久久99九九九99九| 岳母的诱惑电影在线观看| 啪啪啪网站免费在线看| 精产国品一二三77777| 中文字幕熟女乱一区二区| av里面的动作是真进去吗| 欧美第一激情综合网欧美激情| 亚洲一区视频中文字幕在线播放| 欧美巨大另类极品video| 亚洲人成小说网站色| 果冻麻豆一区二区三区| 中文字幕亚洲乱码精品无限| 国产精品剧情在线亚洲| 中文字幕免费啪啪啪| 国产大桥未久一区二区| 三级欧美日韩一区二区三区| 欧美 日韩 精品 中文| 久久综合狠狠综合久久综| 91亚洲最新蜜桃在线| 亚洲精品久久久人妻| 国产人妻熟女ⅹxx丝袜| 天天干夜夜操夜夜骑| 91精品资源在线观看| 在线国产精品欧美| 99久久国产精品免费热| 久久99热精品免费观看视| 亚洲欧美一级特黄大片| 午夜五十路久久福利| 大香蕉伊人97在线| 97精品国产91久久久| 中文字字幕在线精品乱码| 天天天天天天天天日日日| 国产极品气质外围av| 美国男的操女孩的小嫩逼| 91日本精产品一区二区三区| 五月婷婷激情视频网| av在线免费在线观看| 天天插天天干天天狠| 日本有码精品一区二区三区| 精品国模一区二区三区欧美| 岳母的诱惑电影在线观看| 婷婷一区二区三区五月丁| 欧美插插插插插插| 亚洲国产精品一区二区第二页| 丰满放荡熟妇在线播放| 成人午夜麻豆大胆视频| 欧美亚洲愉拍一区二区三区| 中文字幕免费啪啪啪| 久久午夜免费鲁丝片| 少妇精品视频一区二区免费看| 国产精品蝌蚪自拍视频| 中文字幕在线观看av观看| 两个奶被揉得又硬又翘怎么回事| 一二三四区国产在线观看| 99热在线只有的精品| 免费中文字幕a级激情| 天天操天天舔天天射天天日天天干| 港台美女明星av天堂| 午夜福利片无码10000| 精品国产人伦一区二区三区| 欧美日韩在线观看免费播放| 大香蕉尹人在线最新| 汤姆提醒30秒中转进站口| 国产最新av在线免费观看| 婷婷六月天在线视频| 99久久久久久亚洲精品免费| 成人大片男人的天堂| 69av精品国产探花| 天天天天天天天天干夜夜| 亚洲国产精品久久久久久无码| 成年男女免费视频网站无毒| 伊人精品成人综合网| 欧美人与动欧交视频| 河北全程露脸对白自拍| 国产亚洲综合5388| 九九热在线精品播放| 国产熟女五十路一区二区三区 | 蜜臀久久精品久久久久久av| 大成色亚洲一二三区| 天天干夜夜撸天天操| 精品日本少妇久久久| 黑人大巨屌操美女逼| 伊人综合在线视频免费观看| 99久久久久久亚洲精品免费| 天天干天天日天天弄| 成人免费视频现网站99在线观看| 成人人妻h在线观看| 夜夜操天天干夜夜操| 一区二区三区四区 在线播放| 最近在线中文字幕免费| 亚洲成人自拍图片网站| 在线观看免费啪啪啪| 最新国产精品久久精品app| 天天摸天天干夜夜操| 天天想要天天操天天干| 免费观看在线中文字幕视频| 成年人免费福利在线| 亚洲精品国产99999| 免费的啪啪视频软件| 国产一区二区三区四区精| 亚洲欧美日韩中文视频| 杜达雄啪啪毛片视频| 一区二区三区国产精华液区别大吗| 亚洲另类欧美综合久久| 黑人爆操女人免费视频| 白白色在线免费视频发布视频| 北野中文字幕一区二区| 午夜国产成人精品视频观看| 亚洲av中文免费在线| 日本四十路人妻熟女| 亚洲|久久久久久一二三区丝袜| 久久内射天天玩天天懂色| 成人精品动漫一区二区| 松本菜奈实最新av在线| 欧美黄色性视频网站| 欧美一区二区三区视频看| 秋霞成人午夜鲁丝一区二区三区| 午夜国产精品免费视频| 插鸡视频免费网站在线播放| 国产剧情av在线免费观看| 天天干夜夜爽狠狠操| 欧美成人红桃视频在线观看| 天天做天天日天天搞| 亚洲综合第一区二区| 美女一区二区四区六区八区| 性感美女极品18禁网站在线| 亚洲黄色免费在线观看网站| 网站在线观看蜜臀91| 天天操天天射天天操天天日| 日本韩国欧美在线视频| 中文字幕观看中文字幕免费| 91久久久久久最新网站| 午夜久久久久久av五月| 午夜精品久久久久久久精品乱码| 可在线免费观看av| 午夜福利片无码10000| 国产人妻熟女ⅹxx丝袜| 精品一区二区三区喷水内射高潮| 中文字幕在线免费观看人妻| 欧美情色av在线观看| 黑人大巨屌操美女逼| 伊人精品久久一区二区| 五月天色婷婷狠狠爱| 亚洲激情视频在线观看免费| 亚洲av毛片一区二区三区网| 一区二区三区四区 在线播放 | 国产主播诱惑毛片av| 97香蕉久久国产超碰| 呻吟求饶的人妻中文字幕| 美国男的操女孩的小嫩逼| 亚洲第一区av中文字幕| 久久国产精品久精国产爱 | 天天色 天天操 天天好逼| 99精品视频在线在线观看| 日韩成人在线电影首页| 女生裸体视频免费网站| 亚洲欧美激情国产综合久久久| 2020年亚洲男人天堂网| 亚洲熟女在线免费观看| 91精品国产91久久久久久密臀| 天天干夜夜爽狠狠操| 老色鬼精品视频在线观看播放| 免费中文三级在线观看| 欧美成人少妇人妻精品| 亚成区一区二区人妻熟女| 精品国产人伦一区二区三区| 五月天男人的天堂中文字幕| 亚洲熟女一区二区三区250p| 50熟妇一区二区三区| 中文字幕 首页 人妻| 蜜臀久久精品久久久久久av| 久久无码高清免费视频| 亚洲国产美女主播在线观看| 一区二区三区五区六区| 亚洲欧美国产一本综合首页| 男人av一区二区三区| 美女激情久久久久久久| 在线看的免费网站黄| 色视频免费观看网址| 91人妻人人爽色啊啊啊| 丝袜美腿日韩av一区| 在线免费观看欧美小视频 | 青娱乐免费视频一二三| 60路70路日本熟妇| 亚洲一区二区三区无码在线| 在线中文字幕人妻av| 亚洲av中文免费在线| 午夜久久人妻一级内射av网址| 欧美日韩成人高清中文网| 欧美操大黑鸡巴视频在线观看| 亚洲一区二区在线视频观看免费| 天天插天天透天天爽| 日韩av熟妇在线观看| 一区二区三区免费版在线| 亚洲成人中文无码在线| 在线视频国产精品欧美| 欧美久久一区二区伊人| 美女福利视频一区二区三区四区| 日本成人福利电影网| 91色乱一区二区三区| 亚洲成人欧洲成人在线| 区一区二区三免费观看视频| 呻吟求饶的人妻中文字幕| 开心激情五月天作爱片| 亚洲欧美不卡专业视频| 夜色福利视频免费观看| 天天日 天天舔 天天射| 麻豆出品视频在线观看| 欧美视频免费观看777| 天天干天天色综合久久| 日本四十路人妻熟女| 国产精品网站的黄色| av激情四射五月婷婷| 亚洲最大的自拍偷拍网| 免费在线观看亚洲福利| 999久久久人妻精品一区| 日韩人妻中文字幕二区| 99色在线观看免费观看| 亚洲欧美激情久久久| 伊人精品久久一区二区| 99久久久久久久久久久久久| 国产精品免费看一区二区三区| 久久久久久久久久久久久国产 | 国产大桥未久一区二区| 中文字幕 一区二区在线观看| 一区二区三区不卡免费视频网站| av日韩视频在线观看| 欧美啪啪一区二区三区| 岳母的诱惑电影在线观看| 人人人妻人人人妻精品少妇| 精品高潮呻吟久久av| 亚洲自拍偷拍一区二区中文字幕| 天天干天天色综合久久| avgo成人短视频| 99久9在线视频播放| 麻豆午夜激情在线观看| 99精品久久99久久久久一| 欧美精品乱码99久久蜜桃免费| 天天日天天玩天天摸| 99久久人人爽亚洲精品美女| 东京热日本一区二区三区| 中文字幕在线免费观看人妻| 凹凸视频一区二区在线观看| 国产av剧变态维修工虐杀美女| 中字幕人妻熟女人妻a62v网| 中文字幕国产一区在线视频| 中文字幕亚洲无线乱码| 亚洲天堂色综合久久| 视频在线+欧美十亚洲曰本| 在线能看视频你懂的| 美女福利网站在线播放| 青青在线免费手机播放视频| 美女扒开逼逼给你看| 汤姆提醒30秒中转进站口| 一区二区三区婷婷中文字幕| 亚洲精品1卡2卡3卡| 国长拍拍视频免费孕妇| 亚洲精品国品乱码久久久久| 中文字幕 首页 人妻| 亚洲熟女乱色一区二区三区视频 | 可以免费观看日韩av| 成人av中文字幕在线看| 亚洲欧美日韩电影一区| 中文字幕人妻一区二区视频系列| 亚洲国产精品一区51动漫| 中文字幕 首页 人妻| 五月婷婷激情视频网| 琪琪日本福利伦理视频| 欧美啪啪一区二区三区| alisontyler和黑人| 妈妈的朋友中字在线免费观看| 成人资源中文在线观看| 18岁禁一二三区免费体验| 天天操天天日天天碰| 国产成人91色精品免费看片| 天天日天天亲天天操| 桃色成人开心激情网| 日本一区二区高清av中文| alisontyler和黑人| 在线成人教育平台排名| 午夜精品小视频在线播放| 伊人网在线免费观看| 人妻少妇精品二三区| 日本美女爱爱视频网站| 国产精品网站的黄色| 欧美男女一区二区三区| 亚洲欧美精品海量播放| 99精品视频在线在线观看| 午夜久久久久欠久久久久| 18禁网站在线点击观看| 日本东京热最新中文字幕| 亚洲 综合 欧美 一区| 天天做天天日天天搞| 亚洲另类激情视频在线看| 国产精品内射婷婷一级| 天天在线播放日韩av| 全国熟妇精品一区二区免费视频 | 最近日韩免费在线观看| av丝袜免费在线观看| 大香蕉尹人在线最新| 涩涩黄片在线免费观看| 国产精品中文字幕丝袜| 亚洲美女露隐私av一区二区精品| 天天干天天日天天弄| 91精品资源在线观看| 欧美男女一区二区三区| v天堂国产精品久久| 超碰在线免费观看视频97| 福利视频导航在线观看| 黑川堇人妻88av| 99久久碰碰人妻国产| 久久久久久a女人处女| 亚洲精品一区二区gif| 97精品久久久久久无码人妻| 亚洲欧美激情国产综合久久久| 欧美日韩亚洲国产视频二区| 亚洲熟女在线免费观看| 日本少妇三级交换做爰做| 91porny九色视频偷拍| 成人午夜麻豆大胆视频| 天天做天天日天天搞| 91九色pony蝌蚪| 新香蕉视频香蕉视频2| 青青国产95免看视频| 在线视频国产精品欧美| 久久99热精品免费观看视| 天堂在线中文字幕av| 每日更新日韩欧美在线| 999国产精品视频免费看| 亚洲av激情综合网| 熟妇精品午夜久久久久| 亚洲同性同志一二三专区| 亚洲一区二区中文字幕久久 | 老司机免费视频福利0| 人妻熟女 亚洲 一页二页| 免费在线观看视频啪啪| 亚洲成a人片777777张柏芝| 99女福利女女视频在线播放| xxnxx国产美女| 国产福利一区二区三区在线观看| 午夜福利片无码10000| 天天操天天射天天操天天日| 蜜桃臀少妇白色紧身裤细高跟| 亚洲成a人片777777张柏芝| 国产熟妇色xxⅹ交白浆视频| 熟女一区二区视频在线| 91日本精产品一区二区三区| 欧美精品999不卡| 99热99这里免费的精品| 男人的天堂在线2025| av在线观看视频免费| v天堂国产精品久久| 亚洲av三级电影在线观看| 麻豆午夜激情在线观看| av 一区二区三区 熟女| 在线观看中文字幕精品av| 亚洲女人自熨在线视频| 在线中文字幕人妻av| 熟女国内精品一区二区三区 | 日本少妇人妻中文在线| 亚洲国产精品一区二区第二页| 日韩一区二区在线播放观看| 国产91黑丝小视频在线观看| 午夜久久久久久av五月| 成人黄色录像在线观看| 免费看一级高潮喷水片| 最近日韩免费在线观看| 人妻系列级片在线观看视频| 欧美操大黑鸡巴视频在线观看| 亚洲图片另类综合小说| 高潮喷水在线视频观看| 九九热视频1这里只有精品| 精品视频在线观看免费99| 久久久久久高清一区| 亚洲色大WWW永久网站| 精品国产污污污免费入口| 午夜福利国产精品久久久久| 亚洲av激情综合网| 中文字幕 人妻 熟女| 久久99热精品免费观看视| 鸡巴插进美女的嫩小穴视频| 国产美女主播av在线| 天天操天天干天天谢| 超碰在线观看97资源| 国产视频1区2区3区| 开心激情五月天作爱片| avtt中文字幕手机版| 交换的一天中文字幕在线视频| 鸡巴在里面福利视频在线观看| 91九色pony蝌蚪| 青青青国产精品视频| 日本人妻少妇xxxxxxx| 亚洲成人,国产精品| 九热精品视频在线观看| 欧美精品激情在线不卡| 91色老久久精品偷偷蜜臀| 成年男女免费视频网站无毒| 91精品久久久久久久久99蜜臀| 1区3区4区产品乱入视频| 日韩av水蜜桃一区二区三区| 不卡在线一区二区三区| 欧美熟女xx00视频| 福利视频免费在线播放| 91人妻人人爽色啊啊啊| 中文在线字幕免费观看日韩视频| 欧美日韩精品aaa| 一二区二区不卡视频| 又爽又粗又猛又色又黄视频| 一区二区三区婷婷中文字幕| 中文字幕日本一二三区| 外国美女舔男人坤坤| 亚洲国产日韩精品在线| 东京热日本一区二区三区| 91精品国产91久久久久久密臀| 核xp工厂精品久久亚洲| 日本老熟老熟妇七十路| 亚洲成人,国产精品| 97cao在线视频| av一区二区三区四区五区在线| 色丁香久久激情综合网| 另类欧美激情校园春色| 老熟妇一区二区三区v∧88| 天天爱天天日天天爽| 人人妻人人爽人人爽欧美一区| 羞羞漫画无限免费观看秋蝉| 夫妻黄色一级性生活片| 日本男女免费福利视频| 最新国产精品综合网高清| yellow在线亚洲精品一区| 大香蕉伊人97在线| 松本菜奈实最新av在线 | 新亚洲天堂男子av| 9久re热视频在线精品| 核xp工厂精品久久亚洲| 亚洲美女午夜激情视频在线观看| 97人妻在线视频自拍| 欧美区一区二区三视频| 久久久久夜色国产精品电影| 成人午夜av电影网| 超级黄肉动漫在线观看| 日本韩国福利在线播放| 精久久久久久久久久久久| 男人的天堂av中文字幕| 熟女阿高潮合集一区二区| 99re这里是国产精品首页| 最近最新欧美日韩精品| 黄色网络中文字幕日本| 午夜精品老牛av一区二区三区| 欧美日本国产一区二区| 在线成人教育平台排名| 国产女人18毛片水真多精选| 熟女俱乐部jukujoclub| 亚洲精品激情视频在线观看 | 亚洲av网站一区二区三区| 不卡视频在线 欧美日韩| lutu玩弄人妻短视频| 精品国产久久久久午夜精品av| 真人一进一出抽搐大尺度视频| av天堂hezyo| 特级aaaaa黄色片| 91精品视频在线观看视频| 五月在线视频免费播放91| 91激情四射婷婷综合| 青青草一个释放的网站| 9420高清视频在线观看国语版| 欧美极品少妇高潮喷水| 漂亮人妻口爆久久精品| 欧美啪啪一区二区三区| 国产视频成人一区二区| 五月婷婷伊人久久中文字幕| 老司国产精品视频免费观看| 伊人精品久久一区二区| 亚洲欧美日韩电影一区| 久久久久久免费观看av| 天堂av国产av伦理av| 久草久热这里只有精品| 亚洲乱码国产乱码精品精视频| 午夜偷拍的视频久久久免费大全| av人摸人人人澡人人超碰小说| 99国产精品国产精品毛片19| 亚洲一级熟妇丰满的女人| 91 精品视频在线看| av在线免费在线观看| 国产男女无套?免费网站下载| 青青免费观看视频| 久久人人爽人人爽人人av东京热 | 九九六视频,这里只有精品| 国产精品成人免费电影| 一区二区三区免费版在线| 后入日韩翘臀蜜桃臀美女| 久久99嫩草99久久精品| 69视频在线精品国自产拍| 人妻少妇的va视频| 有码一区二区三区四区五区| 精品人妻在线激情视频| 天堂av国产av伦理av| av天堂hezyo| 91精品麻豆91夜夜骚| 亚洲制服丝袜在线看| 91精品夜夜夜一区二区| 最新日韩中文字幕免费在线观看 | 国产午夜羞羞一区二区三区| 天天操天天日天天碰| 福利在线国产小视频| 狂操鸡巴小骚逼视频免费观看| a级片特黄免费看| 欧洲亚洲一区二区三区四区| 亚洲精品国品乱码久久久久| 岳母的诱惑电影在线观看| 一区二区三区国产精华液区别大吗| 2026天天操天天干| 夜夜躁婷婷av蜜桃妖| 18在线观看免费观看| 亚洲全国精品女人久久久| 国产熟女五十路一区二区三区| 亚洲国产日韩欧美一区二区三区,| 久久综合狠狠综合久久综| 丰满人妻被猛烈进入中文字幕| 川上优所有中文字幕在线| 91麻豆精品国产在线| 九色porny91国产| 青娱乐不卡视频在线| alisontyler和黑人| 日韩激情亚洲国产欧美另类激情| 亚洲一区二区偷拍女厕所| 成年男女免费视频网站无毒| 欧美一区二区三区爽爽| 亚洲制服丝袜在线看| av人摸人人人澡人人超碰小说| 啪啪啪网站免费在线看 | 国产女人18毛片水真多精选| 大乳人妻一区二区三区| 日韩激情文学在线视频| 日本欧美视频在线免费| 天天弄天天草天天日天天| 50熟妇一区二区三区| 最新国产精品拍在线观看| 老熟女xxxⅹhd老熟女性| 99精品视频在线在线观看| 久久久久久久岛国免费观看| 久久99国产中文丝袜| 国产美女主播av在线| 国产夫妻视频在线观看免费| 青青青国产精品视频| 精品不卡一区二区三区| 91精品久久久久久久久99蜜臀| 美女福利网站在线播放| 亚洲中文字幕最新地址| 天天躁狠狠躁狠狠躁性色| 69av精品国产探花| 亚洲黄色成人一级片| ass亚洲熟女ass| 女同性恋av在线播放| 国产视频成人一区二区| 亚洲国产综合久久精品| 日本福利片在线播放| 美女张开腿给男人桶爽的软件| 91精产国品一二三产区区别网站| 2020国产激情视频在线观看| 中文字幕国产一区在线视频| 中文字幕在线字幕乱码怎么设置 | 久久人妻人人草人人爽| 大奶熟妇激情操逼逼| 中文字幕熟女人妻一区| 日本福利视频网站导航| 丝袜美腿日韩av一区| 日本福利网站一区二区| 亚洲精品综合欧美精品综合| 免费在线观看亚洲福利| 中文字幕福利视频第四页| 99久久国语露脸国产精品| 精产国品一二三产品区别97| 国产自拍偷拍视频在线免费观看| jizzjizz国产精品传媒| 香港日本台湾经典三级| 蜜桃臀少妇白色紧身裤细高跟| 欧美日韩成人高清中文网| 亚洲理论在线a中文字幕97| 中文字幕在线免费观看人妻 | ass亚洲熟女ass| 网站在线观看蜜臀91| 偷拍熟女大胆免费视频| lutu玩弄人妻短视频| 国产午夜羞羞一区二区三区| 亚洲国产精品 久久久| 豆豆专区操逼性视频在线| 在线免费观看视频18| 5566熟女人妻人妻| 538欧美在线观看一区二区三区| 人妻少妇的va视频| 免费啪啪啪网站在线观看| 国际精品熟女一区二区| 91亚洲最新蜜桃在线| 熟女阿高潮合集一区二区| 天天干夜夜操91视频网站| 日韩精品视频一区二区三区在线| 欧美黑人性猛交小矮人| 欧美成人少妇人妻精品| 人妻女侠被擒受辱记| avjpm亚洲伊人久久| 亚洲精品乱码久久久久app| 欧美 日韩 精品 中文| 欧美黄色性视频网站| 不卡一区二区视频在线| 色噜噜噜噜色噜噜色合久一| 欧美情色av在线观看| 欧美日本亚欧在线观看| 十八禁黄色免费污污污亚洲| av激情四射五月婷婷| 黑鸡巴肏少妇逼视频| 欧美日韩高清片在线观看| 亚洲午夜国产末满十八岁勿进网站| 天天天天天天天天日日日| 亚洲av毛片一区二区三区网| 国产精品蝌蚪自拍视频| 国产探花自拍亚洲av| av成人三级高清日韩| 四季av人妻一区二区三区| 亚洲自拍偷拍av在线| 中文字幕丰满子伦无码专区| 久久久精品人妻无码专区不卡| 911美女片黄在线观看| 午夜久久人妻一级内射av网址| 成人资源中文在线观看| 美利坚合众国av天堂| 快进来插我的逼嗯啊视频 | 亚洲黑人欧美二区三区| 公侵犯人妻中文字幕巨| 天天想要天天操天天干| av 一区二区三区 熟女| 欧美操大黑鸡巴视频在线观看| 人妻少妇的va视频| 91日本精产品一区二区三区| 日本少妇三级交换做爰做| 亚洲成a人77777| 2021国产在线视频| 最近最新欧美日韩精品| 亚洲熟女少妇中文字幕系列| 91精品久久久久久久99蜜月| 亚洲精品激情视频在线观看| 亚洲国产日韩精品在线| 久久99国产中文丝袜| 在线看日韩av不卡| 91精品91久久久久| 91九色pony蝌蚪| 91九色91在线视频| 人妻激情综合久久久久蜜桃| 天天操天天舔天天做| 丰满少妇_区二区三区| 青青草原在线播放日韩| 夜夜骚av一二三区| 日本不卡视频一二三区| 人妻女侠被擒受辱记| 亚洲av在线免费播放| 免费观看在线中文字幕视频| 福利在线国产小视频| 熟女人妻精品视频一区| 一区二区欧美 国产日韩| 91九色国产在线视频| 999久久久人妻精品一区 | 日韩av水蜜桃一区二区三区| 69精品人妻久久久久久久久久久| 99久久免费播放在线观看视频| 欧美成人少妇人妻精品| 99色在线观看免费观看| 中国特黄色性生活片| 超碰在线观看97资源| 99色在线观看免费观看| 人妻少妇视频系列视频在线| avjpm亚洲伊人久久| 女人的天堂av在线网| 高潮喷水一区二区三区| 国产自拍偷拍视频在线免费观看| 成人资源中文在线观看| 2018中文字字幕人妻| 亚洲宅男噜噜噜66在线观看| 青青国产95免看视频| 人妻少妇视频系列视频在线| 不卡一区二区视频在线| 黄片视频免费观看视频| 东京热日韩av在线| 在线视频自拍第三页| 99女福利女女视频在线播放| 91九色pony蝌蚪| 女人的天堂av在线网| 一看就是假奶的av| 狠狠操深爱婷婷综合一区| 亚洲中文字幕在线视频观看二区 | 亚洲第一页欧美第一页| 一区二区三区五区六区| 亚洲成人欧洲成人在线| 欧美亚洲国产一区二区| 伊人久久综合国产精品| 手机看电影一区二区三区| 亚洲少妇色小说综合| 免费中文字幕a级激情| 天天摸天天舔天天操天天日| 2020国产成人精品视频| 特级aaaaa黄色片| 亚洲自拍偷拍av在线| 日本不卡 中文字幕| 午夜精品秘一区二区三区| 国产在线观看一区二区三区四区| 最近日韩免费在线观看| 国产成人情侣av在线| 91人妻人人爽色啊啊啊| 久久人妻人人草人人爽| 天天曰天天摸天天爽| 欧美久久蜜臀蜜桃资源吧| 不用付费特黄特色亚洲特级黄色片| 插鸡视频免费网站在线播放| 午夜精品视频免费观看| 国产一区二区三区四区精| 最新国产精品综合网高清| 欧美黄色性视频网站| v天堂国产精品久久| 老司机伊人99久久精品| 99精品久久精品一区二区| 国产黑色丝袜 在线日韩欧美| 青娱乐免费视频一二三| 婷婷一区二区三区五月丁| 97cao在线视频| 中文字幕日韩人妻在线三区| 精产国品一二三产品区别91| 亚洲中文字幕在线视频观看二区| 中文字幕在线观看亚洲情色| 久久久久夜色国产精品电影| 2026天天操天天干| 漂亮人妻口爆久久精品| 免费看日韩黄视频在线观看| 欧美一级aaaaaaa片| 一区二区三区午夜福利在线| 日本黄色一级电影网址| 国产 亚洲 欧美 自拍| 亚洲成人动漫av在线| 日本午夜福利免费在线播放| 男人的天堂av中文字幕| 亚洲精品中文字幕手机在线免费看| 99久久久久久久久久久久久| 最近日韩免费在线观看| 精品欧美乱码久久久| 在线中文字幕人妻av| 久久久精品人妻无码专区不卡| 中文字幕日本一二三区| 成人超碰一区二区三区| 黄在线看片免费人成视频| av天堂hezyo| 欧美 日韩 精品 中文| 琪琪日本福利伦理视频| 免费的啪啪视频软件| 亚洲另类欧美综合久久| 人妻少妇的va视频| 99re这里是国产精品首页| 亚洲欧美小说中文字幕| 可以直接看av网站| 四虎国产精品国产精品国产精品| yy4080黄色片| 欧美黄色一区二区三区视频| 国产中年夫妇激情高潮| 中国精品人妻一区二区| 1区3区4区产品乱入视频| 绿巨人浩克在线视频观看| 99久久99九九九99九| 在线免费观看欧美小视频| 日本在线免费观看国产精品| 日本一区二区三区区别| 91亚洲最新蜜桃在线| 亚洲欧美不卡专业视频| 爱搞视频在线观看视频91| 在线中文字幕人妻av| 呻吟求饶的人妻中文字幕| 国产精品美女免费视频观看| 69xx精品久久久久| 久久综合狠狠综合久久综| 无人区一码二码三码区别在哪 | 又粗又长又硬又黄又爽| 91佛爷视频在线观看| 无码人妻丰满熟妇区五路| av中文字幕国产精品| 内地精品毛片在线观看| 欧美精品激情在线不卡| 亚洲成年人精品国产| 午夜国产精品免费视频| 亚洲一区二区三区无码在线| 日本高清在线观看不卡视频| 国产欧美福利在线观看| 亚洲 综合 欧美 一区| 奇米网首页神马久久| 青青青国产精品视频| 日本黄色一级电影网址| 亚洲美女露隐私av一区二区精品| 青青青在线视频观看97| 韩国毛片w妈妈的朋友7| 91 精品视频在线看| 国产精品成人免费电影| 9999久久久久老熟妇二区| 欧美人与动欧交视频| 亚洲美女露隐私av一区二区精品| 最新日韩av电影在线播放| 不卡高清一区二区三区| 可在线免费观看av| 蜜桃臀少妇白色紧身裤细高跟| 中文字幕久久久国产| 中出小骚货在线观看| 九九热在线精品播放| 欧美视频免费观看777| 色哟哟亚洲乱码国产乱码精品精 | 天天搞天天操天天干| 国产美女主播av在线| 九色91操最新在线观看网址| 亚洲 综合 欧美 一区| 国产精品久久人人添| 国内自拍第一区二区三区| 午夜国产免费视频亚洲| 九十九步都是爱最后一步是尊严| jandara在线观看| 国产精品久久久久久成人久| 久久人妻诱惑我视频| 青青操91美女国产| 欧美成人性生活视频播放| 黄色av日韩在线观看| 偷拍熟女大胆免费视频| 日本老熟妇av老熟妇| 松本菜奈实最新av在线| 99亚偷拍自图区亚洲| 得得爱在线视频观看| 亚洲在线观看中文字幕av| 超级黄肉动漫在线观看| 欧美久久一区二区伊人| 美女福利网站在线播放| 大尺度久久久久久久| 亚洲男人天堂最新网址大全| 九九六视频,这里只有精品| 羞羞漫画无限免费观看秋蝉| 欧美日本国产一区二区| 国产福利小视频在线观看网站 | 亚洲韩精品一区二区三区| 成人精品影视一区二区| 亚洲熟女人妻自拍在线视频 | 亚洲美女午夜激情视频在线观看| 中出小骚货在线观看| 92麻豆一区二区三区| 高清国产美女a一级毛片| 蜜桃臀少妇白色紧身裤细高跟 | 鸡巴在里面福利视频在线观看| 午夜在线成人免费电影| 日本一区二区高清av中文| 国产在线观看一区二区三区四区| 美女福利视频一区二区三区四区 | 东京热日韩av在线| 欧美在线视频不卡一区| 亚洲av毛片一区二区三区网| 大鸡扒操大逼大片免费关看| 自拍偷拍亚洲综合第一页| 日日躁夜夜躁狠狠操| 国产青青青青草免费在线视频| 亚洲av三级电影在线观看| 2021国产在线视频| 日韩黄色在线观看网站上| 九九热视频1这里只有精品| 一看就是假奶的av| 欧美成人久久久桃色aa| 日韩一级欧美一级片| 亚洲一区在线视频观看地址| ass亚洲熟女ass| 小妹妹爱大棒棒免费观看视频| 亚洲黄色成人一级片| 美女福利视频一区二区三区四区| 日韩成人免费观看电影| 杜达雄啪啪毛片视频| 丰满人妻熟女aⅴ一区| 在线看的免费网站黄| 亚洲国产精品自拍偷拍视频在线 | 成人午夜高清福利视频| 亚洲综合在线视频在线播放| 999精品视频免费在线观看| 在线观看黄页网站视频网站| 成人av中文字幕在线看| 婷婷色综合五月天视频| 久久久久夜色国产精品电影| 黄色片黄色片黄色片黄色片黄色| 美女欧美视频在线观看免费| 99国产精品国产精品毛片19| 福利视频免费在线播放| 后入日韩翘臀蜜桃臀美女| 91精品夜夜夜一区二区蜜桃| 夜夜骚av一二三区| 不卡一二三区别视频| 国产女主播在线观看一区| 精久久久久久久久久久久| 欧洲精品在线免费观看| 青娱乐免费最新视频| 无码精品黑人一区二区老人| 青娱乐不卡视频在线| 在线观看视频免费一区二区三区| 91九色人妻在线播放| 伊人精品久久一区二区| 360偷拍蜜桃臀69式| 亚洲人妻系列在线视频| av在线播放观看h| 91性高湖久久久久久久久久| 日韩美精品成人一区二区三区四区| 国产毛片特级Av片| 久久久久久高清一区| 天天曰天天摸天天爽| 免费在线观看亚洲福利| 中文字幕av人妻一区二区三区| 在宿舍强奷两个清纯校花| 美国男的操女孩的小嫩逼| 天天碰天天摸天天搞 | 男人资源站中文字幕| 亚洲熟女在线免费观看| 亚洲自拍偷拍av在线| 天天干天天操天天要| 亚洲a级视频在线播放| 99热在线只有的精品|