亭亭五月天在线观看,亭亭五月天在线观看,国产最新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
日本东京热最新中文字幕| 久久久西西gogo日本美女人体| 国产欧美福利在线观看| 久草视频在线视频在线视频| 91九色91在线视频| 亚洲制服丝袜美腿在线| 亚洲一区二区精品三区视频| 91porny九色视频偷拍| 日韩欧美国产一区二区在线观看| 黄色av 在线观看| 91国产精品乱码久久久久久| 国色天香一二三期区别大象| 大屁股熟女一区二区视频| 深夜福利免费观看在线看| 大片a免费观看在线视频观看| 亚洲一级熟妇丰满的女人| 久久人人爽人人爽人人av东京热| 亚洲一区二区三区无码在线| 免费的啪啪视频软件| 亚洲综合熟女乱中文| 免费在线观看亚洲福利| 大香蕉尹人在线最新| 亚洲一区二区中文字幕久久| 黑川堇人妻88av| 国产一区二区三区四区精| 另类欧美激情校园春色| 川上优所有中文字幕在线| 最新中文字幕久久久久| 欧美男男在线观看视频网站| 日本欧美亚洲国产啊啊啊| 久久视频 在线播放| 青娱乐这里只有精品| 久久99久久99久久97的人| 一区二区三区午夜福利在线| 国产极品气质外围av| 日本一区二区三区区别| 91色哟哟视频在线观看| 在宿舍强奷两个清纯校花| 精品久久久久久久久久久久久| 夜色17s精品人妻熟女av| 欧美亚洲愉拍一区二区三区| 亚洲乱熟女一区二区三区影片| 亚洲综合熟女乱中文| 自拍偷拍色图亚洲天堂| 91人妻人人爽色啊啊啊| 精品国产污污污污免费观看| 最近中文字幕免费视频一| 狂操鸡巴小骚逼视频免费观看| 果冻麻豆一区二区三区| 夜色福利视频免费观看| 美女一区二区四区六区八区| 两个人在一起靠逼啊啊啊| 精品一区二区三区免费毛片W| 欧美视频亚洲视频在线| 99免费观看在线视频| av人摸人人人澡人人超碰小说| 最新久久这里只有精品| 天天干夜夜撸天天操| 男插女视频大全免费| 大乳人妻一区二区三区| 加勒比不卡在线视频| 亚洲综合在线视频在线播放| 亚洲人精品午夜射精日韩| 国产,亚洲,欧美综合| 日本成人福利电影网| 男女啪啪啪网站在线观看免费| 外国美女舔男人坤坤| 在线观看中文字幕视频成人| 天天透天天舔天天操| 青青青在线视频观看97| 国产毛片特级Av片| 日本高清 中文字幕| 99久久久久久久久久久久久| 96在线观看免费播放| 成年人免费黄色av| 欧美第一激情综合网欧美激情| 成年人免费福利在线| 人妻超清中文字幕在线乱码| 亚洲永远av在线播放| 国产精品无码无卡免费观| 亚洲成人自拍图片网站| 亚洲欧美国产人成在线| 日韩一区二区在线播放观看| 日本电影一级人妻在线播放四区| 天天操天天日天天碰| 日日夜夜免费视频精品| 欧美精品乱码99久久蜜桃免费| 全国熟妇精品一区二区免费视频| 天天日天天亲天天操| 在线观看中文字幕少妇av| 一二三四区国产在线观看| 亚成区一区二区人妻熟女| 999国产精品视频免费看| 蜜乳av一区二区三区免费观看| 免费看超污视频在线观看| 人妻被强av系列一区二区| 亚洲AV无码一二三四区在线播放| 天天干夜夜爽狠狠操| 日韩男女视频网站在线观看| 全彩漫画口工18禁| 美女av色播在线播放| 福利在线国产小视频| 91精品国产欧美在线| 9662av在线视频| 区一区二区三免费观看视频| 亚洲一区二区三区四区入口| 午夜精品一区二区三区不卡顿| 伊人情人成综合视频| 欧美猛少妇色ⅹⅹⅹⅹⅹ猛叫| 国语对白性爱三级片免费看| 欧美最新一区二区三区| 韩日一级人添人人澡人人妻精品| 2021国产在线视频| 内地精品毛片在线观看| 98热视频精品在线观看| 天天色 天天操 天天好逼| 91美女在线观看视频| 国产成人在线观看视频播放| 亚洲制服丝袜资源网| 中文字幕熟女人妻丝袜丝在线| 高潮喷水在线视频观看| 中国精品人妻一区二区| 999久久久人妻精品一区| 青青草一个释放的网站| 日本四十路人妻熟女| 黄色av网址在线播放| 精品日本少妇久久久| 成年男女免费视频网站无毒| 色欲天天媓色媓香视频综合网| 国产福利小视频在线观看网站| 97视频538在线观看| 60路70路日本熟妇| 一区二区三区资源视频| caopeng97在线观看视频| av网页免费在线观看| 国产熟女五十路一区二区三区 | 免费的啪啪视频软件 | 亚洲美女a级黄色在线播放| 黄色av 在线观看| 99久久久久久久久久久久久| 国产av剧变态维修工虐杀美女| 92在线播放观看视频| 精品欧美乱码久久久| 午夜福利国产精品久久久久| 亚洲情色777中文字幕| 日韩人妻精品久久久久| 1级黄色片在线观看| 蜜乳av中文字幕一区二区| 天天天天天天天天日日日| 熟妇人妻av无码中文字幕| 亚欧洲乱码视频一二三区| 九九九九九久久久国产| 亚洲免费在线不卡视频| 日韩免费黄色片在线观看| 妈妈的朋友中字在线免费观看| av天堂a亚洲va天堂va里番| 亚洲av手机免费在线| tobu8日本高清| 国产精品亚洲精品亚洲| 丰满少妇_区二区三区| 久久人妻人人草人人爽| 91超碰国产在线观看| 亚洲自拍偷拍av在线| 久久人人爽人人爽人人av东京热| 亚洲成人 国产精品| 夜夜人人干人人爱人人操| 亚洲熟女少妇中文字幕系列| 99热99这里免费的精品| 亚洲同性同志一二三专区| 操人妻人妻天天爽天天偷| 免费的啪啪视频软件| 欧美人与动欧交视频| 欧美极品少妇高潮喷水| 亚洲午夜熟女在线观看| 精品国产无乱码一区二区三区| 成人超碰一区二区三区| 秋霞成人午夜鲁丝一区二区三区| 两个奶被揉得又硬又翘怎么回事| 天天插天天干天天狠| 国产自拍偷拍视频在线免费观看| 岛国av成人午夜高清| 色就色综合偷拍区欧美在线| 天天摸天天舔天天操天天日| 亚洲欧洲无码一区2区无码| 日本黄页在线观看视频| 亚洲熟女在线免费观看| 五月天色婷婷狠狠爱| 最新中文字幕久久久久| 中文字幕免费啪啪啪| 桃色成人开心激情网| 欧美黄色一区二区三区视频| 91香蕉国产亚洲一二三区| 亚洲人成大片在线观看| 黄色片黄色片黄色片黄色片黄色| 亚洲一区二区三区四区入口| aaaa级少妇高潮在线观看| 天天操天天干天天谢| 亚洲综合一区二区三区四区| 最新中文字幕久久久久| 欧美最新一区二区三区 | 一二区二区不卡视频| 欧美日韩亚洲tv不卡久久| 51vv精品视频在线观看| 精产国品一二三产品区别97| 激情久久在线免费观看视频| 夜夜人人干人人爱人人操| 午夜呻吟亚洲精品中文字幕在上面| 精品av天堂毛片久久久| 天天躁狠狠躁狠狠躁性色| 日韩人妻一区二区三区在线观看| 日本五六十路熟女视频| 99免费观看在线视频| 韩国毛片w妈妈的朋友7| 国产激情一区二区视频| 夜夜爽夜夜操夜夜爱| 宅男噜噜噜66国产在线观看| 九九热精品视频在线播放| 男人和女人的逼视频| 裸日本资源在线午夜| 台湾18禁久久久久久久激情视频| 九色porny91国产| 欧洲亚洲一区二区三区四区| 女生抠逼自慰啊啊啊啊啊啊啊下载 | 97人妻在线视频自拍| 真人一进一出抽搐大尺度视频| 久久久国产精品免费视频网| 黄色大片一级老太太操逼| 无人区一码二码三码区别在哪| 99在线视频精品观看高| 精品国产污污污污免费观看| 92麻豆一区二区三区| 欧美亚洲另类精品第一页| 日韩加勒比精品在线看| 5566熟女人妻人妻| 国产激情在线观看一区二区三区| xxxx69在线观看视频| 黄版视频在线免费观看| 午夜精品久久久久久久精品乱码| 天天操天天日天天插天天舔| 超碰在线观看97资源| 美女露阴道让男人捅| 中文字幕日韩首页欧美在线激情| 在线免费观看a视频免费| 久草视频在线看免费| 日本人妻少妇xxxxxxx| 欧美在线观看一区二区不卡| 国产精美视频精品视频精品 | 天天曰天天摸天天爽| 亚洲女人自熨在线视频| 啊不行啊操逼好爽大鸡吧视频| 欧美视频亚洲视频在线| 一区二区三区五区六区| 欧美久久一区二区伊人| 天堂网成人av电影| 天天爽天天操天天插| 国产欧美福利在线观看| 中文字幕在线观看亚洲情色| av 资源在线播放| 68福利精品在线视频| 熟女俱乐部jukujoclub| 制服丝袜 中文字幕 日韩| 久久中文字幕av一区二区| 日本国产亚洲欧美色综合| 亚洲成人动漫av在线| 国产亚洲精品啪啪视频| 亚洲资源在线免费观看| 在线观看网站伊人网| 中文字幕亚洲乱码精品无限| 猫咪亚洲中文在线中文字幕| 亚洲欧美日韩中文视频| 亚洲 综合 欧美 一区| 天天插天天透天天爽| 亚洲免费在线不卡视频| 四季av人妻一区二区三区| 十八禁黄色免费污污污亚洲| 国产毛片特级Av片| 人妻在线中文视频视频| 久久精品国产亚洲av热软件| 凹凸视频一区二区在线观看| 日韩人妻精品久久久久| 免费在线观看亚洲福利| 一区二区三区内射美女| 91久久久久久最新网站| 亚洲成人动漫av在线| 麻豆白洁少妇在线播放| 亚洲欧美成人激情在线| 日韩av水蜜桃一区二区三区| 顶级欧美色妇xxxx| 婷婷色综合五月天视频| 亚洲蜜桃久久久久久| 国产资源网站在线播放| 午夜福利午夜福利影院| 亚洲a级视频在线播放| 91日本精产品一区二区三区| 日本少妇熟女乱码一区二区| 美女张开腿给男人桶爽的软件| 亚洲午夜高清在线观看| 97视频人人爱麻豆| 亚洲gay视频在线观看| 91超碰九色porny| 黑人黄色免费一级av| 成年人免费福利在线| 熟女阿高潮合集一区二区| 国产夫妻视频在线观看免费| 国语对白性爱三级片免费看| 97精品久久久久久无码人妻| 68福利精品在线视频| 精品国产久久久久午夜精品av| 99久久国语露脸国产精品| 中文字幕av人妻一区二区三区| 成人十欧美亚洲综合在线| 国产美女视频带a∨黄色片| 99国产精品国产精品毛片19| 一二区二区不卡视频| 18福利视频在线观看| avjpm亚洲伊人久久| 99 re国产精品| 黄色av日韩在线观看| 性感人妻 中文字幕| 成人精品影视一区二区| 西野翔人妻中文字幕中字在| 日本丰满熟妇浓密多毛| 久久人妻诱惑我视频| 亚洲人成大片在线观看| 欧美亚洲国产一区二区| 亚洲字幕一区二区夜色av| 果冻麻豆一区二区三区| 不卡高清一区二区三区| 国产精品美女免费视频观看| 亚洲成年人精品国产| 一区二区三区午夜福利在线| 中文字幕熟女人妻丝袜丝在线| 国产探花自拍亚洲av| jizzjizz国产精品传媒| 欧美肥妇久久久久久| 亚洲国产精品自拍偷拍视频在线 | 不卡在线一区二区三区| 夫亡人妻被强干中文字幕| av大尺度一区二区三区| 第一福利视频在线观看| 国产美女主播av在线| avjpm亚洲伊人久久| 人人妻人人爽人人爽欧美一区| 96在线观看免费播放| 狠狠干狠狠操免费视频| 国长拍拍视频免费孕妇| 黄在线看片免费人成视频| 亚洲18片综合国产av| 青娱乐免费最新视频| 亚洲av三级电影在线观看| 亚洲在线观看中文字幕av| 成熟了的熟妇毛茸茸| 999精品视频免费在线观看| 一二区二区不卡视频| 91精品久久久久久久99蜜月| 亚洲欧美国产一本综合首页| 99久久久久久亚洲精品免费| 精产国品一二三77777| 欧美啪啪一区二区三区| 成人精品影视一区二区| 亚洲国产日韩a在线欧美| 黑川堇人妻88av| 亚洲综合色一区二区三区| 99亚偷拍自图区亚洲| 熟女人妻精品视频一区| 360偷拍蜜桃臀69式| 日本国产亚洲欧美色综合| 高潮喷水一区二区三区| 亭亭五月天在线观看| 九九九九九久久久国产| 国内自拍第一区二区三区| 欧美vs亚洲vs日韩| 女人的天堂av在线网| 欧美一级日韩一级亚洲一级va| 日本国产亚洲欧美色综合| 国产精品午夜无码AV体验区| 欧美日韩亚洲国产视频二区| 日韩av电影中文在线免费观看| 亚洲在线免费观看18| 97人妻在线视频自拍| 日韩久久九九精品视频| 91精品国产综合99| 国产熟妇色xxⅹ交白浆视频 | 亚洲春色av中文字幕| 日韩免费黄色片在线观看| 精品免费一区二区三区四区视频| 少妇被粗大的猛进69视频| 超碰在线免费观看视频97 | 美女福利网站在线播放| 美女张开腿给男人桶爽的软件| 两个奶被揉得又硬又翘怎么回事 | 欧美三区四区在线视频| 视频免费在线观看网站| 波多野结衣在线一区别| 欧美大鸡吧男操女啊啊啊视频| 制服丝袜 中文字幕 日韩 | 91性高湖久久久久久久久久| 国产成人在线观看hd| 午夜偷拍的视频久久久免费大全| 国产av嗯嗯啊啊av| 在线观看中文字幕视频成人| 国产青青青青草免费在线视频| 日本在线免费观看国产精品| —区二区三区女厕偷拍| 亚洲乱码国产乱码精品精视频 | 99久久久久久亚洲精品免费| 自拍偷拍亚洲综合第一页| 一区二区三区午夜福利在线| 嗯~嗯~啊啊啊~高潮了软件| 亚洲一区二区精品三区视频| 欧美成人区一区二区三| julia人妻av一区二区三区| 国产精品亚洲精品亚洲| 国产清纯一区二区在线观看| alisontyler和黑人| 亚洲自拍偷拍av在线| 最新日韩中文字幕免费在线观看| 97超碰人人爽人人做| 日本一区二区高清av中文| 亚洲av在线免费播放| 五十岁熟女高潮喷水| 亚洲欧美成人午夜一区二区| 五月婷婷伊人久久中文字幕| 天天干天天色综合久久| 户外露出视频在线观看| 青青操91美女国产| 亚洲色图日韩在线视频观看| 亚洲蜜桃久久久久久| 欧美第一激情综合网欧美激情| 国产免费久久精品99re丫丫| 欧美亚洲另类精品第一页| 午夜3p福利视频合集| 免费在线观看黄色小网站| 午夜呻吟亚洲精品中文字幕在上面| 熟妇人妻丰满久久久久久久| 中文字幕麻绳捆绑的人妻| 农村大炕有肉大屁股熟妇| 国产白丝一区二区三区av| 最新国产午夜激情视频| 欧美日韩综合精品无人区| 熟女国内精品一区二区三区 | 欧美色视频网址大全| 亚洲av手机免费在线| 丰满放荡熟妇在线播放| 91超碰九色porny| 黄版视频在线免费观看| 超peng视频在线免费播放97| 欧美情色av在线观看| 另类欧美激情校园春色| 丰满少妇高潮喷水视频| 亚洲一区二区三区四区入口| 又爽又粗又猛又色又黄视频| 狠狠操深爱婷婷综合一区| 亚洲av手机免费在线| 黄色av网址在线播放| 日韩久久不卡免费视频| 男生和女生羞羞91在线看| 日韩久久九九精品视频| 亚洲综合在线视频在线播放| 久久久久夜色国产精品电影| 福利在线国产小视频| 91精品国产人妻麻豆| 黄色大片一级老太太操逼| 国产农村乱子伦精精品视频| 欧美一级特黄大片在线| 不卡视频在线 欧美日韩| 国产农村乱子伦精精品视频| 999国产精品视频免费看| 98热视频精品在线观看| 亚洲成人三级黄色片| 妈妈的朋友2中文字幕在线| 99热99这里免费的精品| 亚洲成人五月婷婷久久综合| 一级毛片特级毛片免费的| 日韩三级精品电影久久久久| 一二三四区国产在线观看| 亚洲同性同志一二三专区 | 亚洲精品激情视频在线观看| 亚洲欧美日韩电影一区| 18岁禁一二三区免费体验| 污视频在线观看地址| 亚洲男人天堂最新网址大全| 黄很色很在线免费视频网站| 一区二区欧美 国产日韩| 91中文字幕视频网站| julia人妻av一区二区三区| 青青青青青爽视频在线| 亚洲成人av在线一区二区| 夜夜骚av一二三区| 美女激情久久久久久久| 99久9在线视频播放| 视频在线 一区二区| 中字幕人妻熟女人妻a62v网| 精品一区二区三区喷水内射高潮| 久久久人妻免费视频| 一区二区三区四区久久久久韩日 | 欧美第一激情综合网欧美激情| 欧美日韩不卡视频合集| 国产精品久久人人添| 91精品视频在线观看视频| 中文字幕av特黄毛片| 国产精品福利久久久久| 天天在线播放日韩av| 农村大炕有肉大屁股熟妇| 97超碰人人爽人人做| 情趣视频在线观看91| 在线 制服 中文字幕 日韩| 最近中文字幕免费视频一| 99久久人人爽亚洲精品美女| 天天摸天天舔天天操天天日| av男人站在线观看| 2020精品视频在线| 青青草原在线播放日韩| 羞羞漫画无限免费观看秋蝉| 老司机伊人99久久精品| 日韩人妻精品久久久久| 亚洲欧美不卡专业视频| 国产农村乱子伦精精品视频| 老熟妇一区二区三区v∧88| 亚洲第一区av中文字幕| 国产男女无套?免费网站下载 | 精品国产av虐杀两警花| 羞羞漫画无限免费观看秋蝉| 亚洲国产综合久久精品| 人妻少妇精品二三区| 亚洲色视频在线播放网站| aaaa级少妇高潮在线观看| 男女啪啪啪啪91av日韩| 大成色亚洲一二三区| 福利在线国产小视频| 国产精品午夜无码AV体验区| 大香蕉在线欧美在线视频 | 男人av一区二区三区| 亚洲黄色免费在线观看网站| 91青青青国产免费高清| 亚洲在线观看中文字幕av| 大奶熟妇激情操逼逼| 黄色网络中文字幕日本| 丰满人妻熟女aⅴ一区| 91激情四射婷婷综合| 狠狠操av一区二区三区| 亚洲黄色免费在线观看网站| 久久久久久免费观看av| 极品少妇高潮喷水日出白浆| 人妻激情综合久久久久蜜桃 | 在线看的免费网站黄| 九色porny91国产| tushy一区二区三区视频| 国产激情免费在线视频| 日本人妻少妇xxxxxxx| 91性高湖久久久久久久久久| a级黄片免费观看| 在宿舍强奷两个清纯校花| av中文字幕国产精品| 熟女人妻少妇一区二区| 91日本精产品一区二区三区 | 最新国产午夜激情视频| 亚洲资源在线免费观看| 中日韩又粗又硬又大精品| 亚洲成a人片777777张柏芝| 91精品国产成人久久久久久| 久久久久九九九九九12| 东京热男人的天堂视频| 老司国产精品视频免费观看| 激情九月天在线视频| 国际日韩日韩日韩日韩日韩| 福利视频导航在线观看| 9999久久久久老熟妇二区| 亚洲熟妇在线视频观看| 熟女一区二区视频在线| 午夜偷拍的视频久久久免费大全 | 亚洲欧美成人激情在线| 天堂在线中文字幕av| 男人的天堂aⅴ在线| 日本一区二区高清av中文| 亚洲少妇视频在线观看| 自拍偷拍视频亚洲一区| 91九色91在线视频| 亚洲欧美国产一本综合首页| 日本小视频一区二区| 先锋人妻啪啪中文字幕| 日本福利网站一区二区| 国产一区二区三区四区精| 亚洲韩精品一区二区三区| 中文字字幕在线精品乱码| 亚洲熟妇在线视频观看| 91精品麻豆91夜夜骚| 91精品麻豆91夜夜骚| 国语精品视频自产自拍| 91色乱一区二区三区| 国产黄色主播网址大全在线播放 | 久久免费视频ww一区| 日韩人妻精品久久久久| 国内销魂老女人老泬| 夜夜操天天干夜夜操| 亚洲色图日韩在线视频观看| 欧美久久一区二区伊人| 欧美操大黑鸡巴视频在线观看| 久久sm人妻中出精品一区二区| 国产成人深夜福利短视频99| 最近在线中文字幕免费| 69av精品国产探花| 天天插天天操天天射天天干| 中文在线字幕免费观看日韩视频| 欧美大鸡吧男操女啊啊啊视频| 亚洲成人中文无码在线| 99色在线观看免费观看| 真人一进一出抽搐大尺度视频| 天天插天天干天天狠| 中文字幕熟女人妻丝袜丝在线| 91porny九色视频偷拍| 美女妩媚午夜诱惑网站| 最新日韩中文字幕免费在线观看 | 人妻系列在线免费视频| 日本高清有码在线视频| 伊人免费观看视频一| av网页免费在线观看| a级片特黄免费看| 中文人妻av一区二区三区| 天天操天天日天天插天天舔| 麻豆午夜激情在线观看| 青青草一个释放的网站| 中文字幕 人妻 熟女| 青青青在线观看国产| 欧美日韩高清片在线观看| 亚洲一区在线视频观看地址| 两个人在一起靠逼啊啊啊| 天天操,天天射,天天爽| 亚洲熟妇丰满多毛xxxx网站| 亚洲黄色免费在线观看网站| 天天碰天天摸天天搞| 国产又粗又长又大视频| 区一区二区三免费观看视频| 天天爽天天操天天插| 免费看一级高潮喷水片| 91 精品视频在线看| 操操操操操操操操操网| 国产精品 亚洲欧美 自拍偷拍| 午夜夫妻性生活视频| 亚洲欧美国产人成在线| 国产男女无套?免费网站下载| 18禁男女啪啪啪无遮挡| 97视频538在线观看| xxnxx国产美女| 欧美亚洲国产一区二区| 九一精品人妻一区二区三区| 日本福利视频网站导航| 大香蕉在线欧美在线视频| 一区二区三区午夜福利在线| 上床啪啪啪免费视频| 妈妈的朋友2中文字幕在线| 啪啪啪网站免费在线看| 亚洲一区二区在线视频观看免费| 精品精品精品精品精品污污污污| 高潮喷水在线视频观看| 最近在线中文字幕免费| 美女网站福利在线观看| 在线播放 日韩 av| 精品人妻在线激情视频| 天天看天天爱天天日| 国产精品成人免费电影| 搞乱在线在线观看视频| 漂亮人妻口爆久久精品| 偷拍欧美日韩另类图片| 亚洲gay视频在线观看| 两个奶被揉得又硬又翘怎么回事| 成人十欧美亚洲综合在线| 97精品国产91久久久| 中文字幕 人妻 熟女| 亚洲欧洲无码一区2区无码| 国产亚洲综合5388| 在线观看中文字幕视频成人| 天天干天天日天天弄| 亚洲少妇色小说综合| 国产剧情av在线免费观看| 午夜福利在线不卡视频| 在线视频国产精品欧美| 国色天香一二三期区别大象| iga肾三级算严重吗| 91精品久久久久久久99蜜月| 91精产国品一二三产区区别网站| 欧美一区日韩二区三区四区| 欧美成人少妇人妻精品| 国产美女主播av在线| jandara在线观看| 伊人精品成人综合网| 国产青青青青草免费在线视频| 国模伊人久久精品一区二区三区| 亚洲图片另类综合小说| 91麻豆精品国产在线| 美女张开腿给男人桶爽的软件| 精产国品一二三产品区别97| 全国熟妇精品一区二区免费视频 | 国产精品亚洲精品亚洲| 国产肥胖熟女又色又爽免费视频| 日本香港韩国三级黄色| 99久久国产精品免费热| 久久国产精品久精国产爱| 顶级欧美色妇xxxx| 超碰在线免费观看视频97 | 老牛影视在线一区二区三区| 91系列视频在线播放| 白白色在线免费视频发布视频| 蜜臀一区二区日韩美女少妇视频 | 美国十次了亚洲天堂网国产| 国产精品igao为爱寻找激情| 亚洲综合首页综合在线观看| 亚洲熟女少妇中文字幕系列| 日本四十路人妻熟女| 日日躁夜夜躁狠狠操| 9662av在线视频| 亚洲精品国品乱码久久久久| 新亚洲天堂男子av| 中文字幕精品人妻久久久久| 日本香港韩国三级黄色| 天堂av国产av伦理av| 国产资源在线观看二区| 熟女一区二区三区综合| 欧美亚洲愉拍一区二区三区| 中文字幕 首页 人妻| 午夜福利午夜福利影院| 一区二区三区四区影片| 亚洲a级视频在线播放| av资源中文字幕在线观看| 5d蜜桃臀女无痕裸感| 黑人大吊大战亚洲女人。| 久久久精品人妻无码专区不卡| 亚洲综合首页综合在线观看| 交换的一天中文字幕在线视频| 日本少妇熟女乱码一区二区| 天天摸天天干夜夜操| 最新国产精品综合网高清| 国产精品网站亚洲发布| 台湾18禁久久久久久久激情视频| 久久综合狠狠综合久久综| 91精品91久久久久| 国产男女无套?免费网站下载 | 蜜臀一区二区日韩美女少妇视频| 国产精品国产三级在线高清观看| 日韩欧美国产一区二区在线观看| 91超精品碰国产在线观看| 熟妇人妻丰满久久久久久久| av毛片在线观看网址| 日本欧美国产在线一区| 中文字幕人妻一区二区视频系列 | 少妇被粗大的猛进69视频| 港台美女明星av天堂| 亚洲免费午夜污福利| 亚洲欧美韩国日本一区二区| 国产成人深夜福利短视频99| 丰满少妇人妻一区二区三区蜜桃| 国产91黑丝小视频在线观看| 亚洲国内精品久久久久久久| 两个人在一起靠逼啊啊啊 | 欧美黄色一区二区三区视频| 91色乱一区二区三区| 亚洲精品乱码久久久久app| 日韩av熟妇在线观看| 国产av嗯嗯啊啊av| 久久精品国产亚洲av热软件| 5d蜜桃臀女无痕裸感| 91精品资源在线观看| 夜夜躁婷婷av蜜桃妖| 亚av一二三在线观看| 七色福利视频在线观看| 无人区一码二码三码区别在哪| 日韩激情亚洲国产欧美另类激情| 天堂av国产av伦理av| 亚洲国产精品一区51动漫| 欧美色视频网址大全| 一区二区三区四区影片| 日本不卡视频一二三区| 宅男噜噜噜66国产在线观看| 第一福利视频在线观看| 成人午夜高清福利视频| 久操资源在线免费播放| 亚av一二三在线观看| 黄片视频免费观看视频| 欧美久久蜜臀蜜桃资源吧| av在线观看视频免费| 国产精品国产三级在线高清观看| 亚洲精品色图1234| 人妻熟女 亚洲 一页二页| 男人av一区二区三区| 深夜福利免费观看在线看| 免费中文字幕a级激情| 国产激情免费在线视频| 精品免费一区二区三区四区视频| 久久久久久久精品乱码| 美女黄色啊啊啊啊视频| 欧美久久一区二区伊人| 在线视频自拍第三页| 日本国产亚洲欧美色综合| 亚洲综合第一区二区| 欧美性受黑人猛交裸体视频| 五月在线视频免费播放91| 四季av人妻一区二区三区| 欧美日韩精品aaa| 国产美女高潮精品视频| 精产国品一二三产品区别97| 亚洲成a人片777777张柏芝| 亚洲18片综合国产av| 天天色天天射天天日天天干| 亚洲综合成人精品成人精品| 免费高清av一区二区| 精品国产无乱码一区二区三区| 国产av啊啊啊啊啊啊啊| 一二三四区国产在线观看| 国产激情在线观看一区二区三区 | 不卡在线一区二区三区| 偷拍熟女大胆免费视频| 中国特黄色性生活片| 狠狠干狠狠操免费视频| 老色鬼精品视频在线观看播放| 久久午夜免费鲁丝片| 人妻少妇视频系列视频在线| 天天碰天天摸天天搞| 精品国产无乱码一区二区三区| 亚洲人成大片在线观看| 欧美肥妇久久久久久| 不用付费特黄特色亚洲特级黄色片| 黄在线看片免费人成视频| 亚洲美女色www色| 9420高清视频在线观看国语版| 国产精品igao为爱寻找激情| 新亚洲天堂男子av| 韩国在线播放一区二区三区| 国产青青青青草免费在线视频| 亚洲成人偷拍自拍在线| 中文字幕 人妻 熟女| 亚洲熟女在线免费观看| 狠狠干狠狠操免费视频| 先锋人妻啪啪中文字幕| 久久99热精品免费观看视| ysl蜜桃色7425| 亚洲欧美精品海量播放| 亚洲人精品午夜射精日韩| 天堂av国产av伦理av| 精品人妻在线激情视频| 亚洲春色av中文字幕| 超碰在线观看97资源| 一看就是假奶的av| 欧美色视频网址大全| 狠狠干狠狠操免费视频| 婷婷综合缴情亚洲五月伊人| 欧美一级特黄大片在线| 欧美黄色性视频网站| 午夜偷拍的视频久久久免费大全| 日本少妇熟女乱码一区二区| 人妻超清中文字幕在线乱码| 无码精品黑人一区二区老人| 国产精品无码无卡免费观| 五月天天堂视频在线| 午夜精品小视频在线播放 | 老司国产精品视频免费观看| 都市激情校园春色 亚洲| 99热在线只有的精品| 污视频在线观看地址| 国产女人18毛片水真多精选| 国产精品剧情av在线播放| 亚州av嫩草av极品在线观看| av无限看熟女人妻另类av| 老牛影视在线一区二区三区| 亚洲乱熟女一区二区三区影片| 国产av嗯嗯啊啊av| 欧美vr专区日韩vr专区| 97精品久久久久久无码人妻| 久久久久夜色国产精品电影| 99久久99九九九99九| 久久无码高清免费视频| 天堂网成人av电影| 五月天色婷婷狠狠爱| 制服丝袜中文字幕熟女人妻| 亚洲少妇色小说综合| 国产美女主播av在线| 国产av嗯嗯啊啊av| 99999久久久精品| 不用付费特黄特色亚洲特级黄色片 | 日日夜夜免费视频精品| 加勒比东京热绿帽人妻多人操| 亚洲美女黄色福利视频网站大全| 日本老女人日比视频| 色欲天天媓色媓香视频综合网| 亚洲欧美小说中文字幕| 精品视频在线观看免费99| 91精品综合久久久久久五月天| 黄在线看片免费人成视频| 开心五月综合激情婷婷| 亚洲综合第一区二区| 51精品视频在线免费观看| 日韩成人在线电影首页| 荣立三等功退休有什么待遇| 天天操天天日天天插天天舔| 欧美黄色性视频网站| 国内精品一区二区2021在线| 日本不卡 中文字幕| 国产女主播在线观看一区| 裸日本资源在线午夜| 午夜8050免费小说| 制服丝袜中文字幕熟女人妻| 夜夜躁婷婷av蜜桃妖| 港台美女明星av天堂| 美女激情久久久久久久| 青青在线视频看看| 亚洲av在线免费播放| 超peng视频在线免费播放97| 中文字幕 一区二区在线观看| 69国产精品成人aaaaa片| 成人十欧美亚洲综合在线| 亚洲欧美国产一本综合首页| 青青青国产精品视频| 最新日韩av电影在线播放| 东京热男人的天堂视频| 日本欧美视频在线免费| 国产剧情av在线免费观看| 视频免费在线观看网站| 女同性恋av在线播放| 91精品夜夜夜一区二区蜜桃| 在线观看黄页网站视频网站| 顶级欧美色妇4khd| 亚洲情色777中文字幕| 亚洲一区二区精品三区视频| 日韩精品视频一区二区三区在线| av激情四射五月婷婷| 福利在线国产小视频| 成人黄色录像在线观看| 99久久精品视频16| 一区二区三区国产在线成人av| 中日韩又粗又硬又大精品| 日本久久久久久黄色| 熟妇人妻av无码中文字幕| 亚洲精品久久久人妻| av男人站在线观看| 国产资源网站在线播放| av网页免费在线观看| 5566熟女人妻人妻| 青青青在线视频观看97| 亚成区一区二区人妻熟女| 麻豆国产91制片厂| 男人的天堂在线2025| av在线中文字幕在线| 中文字幕在线观看av观看| 久久人妻人人草人人爽| 九九热精品视频在线播放| 鸡巴在里面福利视频在线观看| 福利视频导航在线观看| 中文字幕熟女人妻一区| 九九热在线精品播放| 深夜福利免费观看在线看| 亚洲制服丝袜在线看| 一区二区三区免费版在线| 18禁网站在线点击观看| 奇米网首页神马久久| 9999久久久久老熟妇二区| 福利美女视频在线观看| 91国产精品乱码久久久久久| 91色哟哟视频在线观看| 黄色片免费网站在线| 18禁男女啪啪啪无遮挡| 亚洲va999天堂va| 极品风骚人妻3p视频| 精品国产污污污污免费观看| 国产高清视频www夜色资源| yellow在线亚洲精品一区| 99热在线只有的精品| 日韩成人精品久久久免费看| 九九热在线精品播放| 操人妻人妻天天爽天天偷| 岳母的诱惑电影在线观看 | 一区二区三区 国产日韩欧美| 精产国品一二三产品区别91| 国产福利小视频在线观看网站| 人妻激情综合久久久久蜜桃 | 人妻中文字幕亚洲在线| 18禁网站在线点击观看| 男人的天堂av中文字幕| 欧美日韩久久丝袜在线| 国产 亚洲 欧美 自拍| 亚洲自拍偷拍一区二区中文字幕 | 91精品国产91久久久久久密臀| 99精品久久99久久久久一| 加勒比东京热绿帽人妻多人操| 2020国产成人精品视频| 中文字幕在线观看av观看| 精品视频在线观看免费99| 狠狠干狠狠操免费视频| 久久免费视频ww一区| 国产探花自拍亚洲av| jizzjizz国产精品传媒| 日本一道中文字幕99| 在线免费观看视频18| 99在线视频精品观看高| 手机看片1024精品国产| 中文字幕观看中文字幕免费| 中文字幕 中文字幕 亚洲| 欧美一级特黄大片在线| 在线视频国产精品欧美| 亚洲综合熟女乱中文| 熟女阿高潮合集一区二区| 好看的日本中文字幕在线观看二区| 九九视频在线观看全部| 欧美肥妇久久久久久| 2020国产激情视频在线观看| av天堂hezyo| 无码人妻丰满熟妇区五路| 韩国毛片w妈妈的朋友7| 91久久久久久最新网站| 中文字幕亚洲无线乱码| 操死你美女在线视频| 中文字幕久久久国产| 大陆中文字幕视频在线| 欧美日韩成人高清中文网| 91人妻人人爽色啊啊啊| 亚洲乱熟女一区二区三区影片| 操烂你的骚逼天天欧美| 天天插天天透天天爽| 日本a级2020在线观看 | 国产漂亮白嫩美女在线图片| 熟女国内精品一区二区三区| 色视频免费观看网址| 91精品视频在线观看视频| 国产激情在线观看一区二区三区| 老牛影视在线一区二区三区| 天天搞天天操天天干| 河北全程露脸对白自拍| 二十四小时日本高清在线观看| 久久综合狠狠综合久久综| 神马不卡视频在线视频| 60路70路日本熟妇| 懂色av之国产精品| 日本少妇精品免费视频| 精品国产污污污污免费观看| 汤姆提醒30秒中转进站口| av激情四射五月婷婷| 91进入蜜桃臀在线播放| 92午夜免费福利视频www| 55夜色66夜色亚洲精品| 69久久夜色精品国产69乱电影| 日韩一级视频一区二区三区| 女同性恋av在线播放| 日本福利视频网站导航| 97超碰人人爽人人做| 玖玖资源站在线观看亚洲| 亚洲综合成人精品成人精品| 在线 激情 亚洲 视频| 天天日天天干天天日天天干天天| 中文字幕av特黄毛片| 在线免费观看a视频免费| 夜夜骚av一二三区| 18在线观看免费观看| 婷婷色九月综合激情丁香| 麻豆白洁少妇在线播放| 中文字幕丰满子伦无码专区| 日本欧美国产在线一区| 不卡在线一区二区三区| 3344永久在线观看视频下载| 五十岁熟女高潮喷水| 久久99精品久久久久久三级| 玖玖资源站在线观看亚洲| 日本人妻熟妇丰满成熟HD系列| a级黄片免费观看| 国模伊人久久精品一区二区三区| 亚洲熟女乱色一区二区三区视频 | 国产资源在线观看二区| 亚洲人妻系列在线视频| 亚洲综合天堂av网站在线观看| 国产91黑丝小视频在线观看| 天天综合久久无人区| 青青操天堂在线观看视频| 亚洲最大先锋资源采集站| 天天干天天日天天弄| 四虎国产精品国产精品国产精品 | 开心五月综合激情婷婷| 久久久久久久精品乱码| 福利一二三在线视频观看| 国产主播诱惑毛片av| 国产 亚洲 欧美 自拍| 夜夜人人干人人爱人人操| 99久久99九九九99九| 欧美性受黑人猛交裸体视频| 天堂一区二区三区在线等| 一区二区欧美 国产日韩| 欧洲精品在线免费观看| 91日本精产品一区二区三区| 久久视频 在线播放| 亚洲午夜高清在线观看| 啪啪啪网站免费看视频| 五月的婷婷综合视频| 亚洲成人自拍av在线| 美女张开腿给男人桶爽的软件| 熟女一区二区三区综合| 一区二区三区不卡免费视频网站 | 手机看片福利一区二区三区四区| iga肾三级算严重吗| 性色蜜桃臀x88av天美传媒| 国产精品黄色片大全| 午夜精品一区二区三区不卡顿| 2020年亚洲男人天堂网| 国产乱码有码一区二区三区| av男人站在线观看| 国产 亚洲 欧美 自拍| 国产精品 亚洲欧美 自拍偷拍| 69国产在线视频网站| 欧美aaaa性bbbbaaaa| 九九六视频,这里只有精品 | 日本不卡视频一二三区| 亚洲欧美激情久久久| 亚洲制服丝袜网站中文字幕| 最新激情中文字幕视频| 国产一区两区三区福利小视频| 成人av中文字幕在线看| 欧美性感美女热舞视频| 欧美日韩国产在线中文字幕| 3344永久在线观看视频下载| 亚洲成人三级黄色片| 亚洲欧洲一区二区三区在线| 羞羞漫画无限免费观看秋蝉| 在线免费观看a视频免费| 夜夜骚av一二三区| 91色老久久精品偷偷蜜臀| 68视频在线免费观看| 精品国产污污污污免费观看| 天天天天天天天天日日日| 国产精品网站的黄色| 亚洲av在线免费播放| 男插女视频大全免费| 亚洲国产精品自产拍在线观看| 亚洲一区视频中文字幕在线播放 | 99999久久久精品| xxxx69在线观看视频| 久久久亚洲熟女一区二区| 老熟妇一区二区三区v∧88| 大乳丰满人妻中文字幕韩国hd| 老鸭窝在线毛片观看免费播放| 自拍偷自拍亚洲精品10p| 亚洲AV无码久久精品国产一区老| 久久久国产精品免费视频网| 韩国资源视频一区二区三区| 农村大炕有肉大屁股熟妇| 色就色综合偷拍区欧美在线| 亚洲熟女人妻自拍在线视频| 69精品互换人妻4p| 羞羞漫画无限免费观看秋蝉| 2020国产成人精品视频| 五月婷婷伊人久久中文字幕| 成人av在线视频免费| 亚洲高清免费在线观看视频| 中文字幕日本一二三区| 婷婷一区二区三区五月丁| 亚洲成人 国产精品| 老司国产精品视频免费观看| 91久久久精品成人国产| 干逼又爽又黄又免费的视频| 精品免费一区二区三区四区视频| 中文字幕在线观看亚洲情色| 有码一区二区三区四区五区| 91色哟哟视频在线观看| 果冻麻豆一区二区三区| 日本欧美视频在线免费| 亚洲国产日韩a在线欧美| xxoo福利视频导航| 92在线播放观看视频| 美女张开腿给男人桶爽的软件 | 亚洲一区二区在线激情| 一区二区三区四区影片| 成人精品影视一区二区| 精品国产av虐杀两警花| 亚洲免费午夜污福利| 午夜精品久久秘?18免费观看| 青青青国产精品视频| a级黄片免费观看| 精产国品一二三77777| 天天天天天天天天日日日| 国长拍拍视频免费孕妇| 自拍偷拍 国产激情| 自拍偷拍亚洲综合第一页| 亚洲成人激情在线综合| 人妻中文字幕亚洲在线| 日本福利视频网站导航| 国产在线观看av一区| 欧美成人区一区二区三| 午夜3p福利视频合集| 中文字幕欧美人妻在线.| 亚洲av 综合av| 91色乱一区二区三区| 天天操天天舔天天爽| 得得爱在线视频观看| 两个人在一起靠逼啊啊啊| 国产精品国产三级在线高清观看| 亚洲永远av在线播放| 日韩欧美黄色免费网站| 成年男女免费视频网站无毒| 熟妇人妻丰满久久久久久久| 乱子伦国产一区二区三区| 4438全国成人免费视频| 绿巨人浩克在线视频观看| 久草视频在线看免费| 女生抠逼自慰啊啊啊啊啊啊啊下载 | 99在线视频精品观看高| 最新福利二区三区视频| av天堂新资源在线| av天堂新资源在线| 4438全国成人免费视频| 五月在线视频免费播放91| 亚洲在线观看中文字幕av| 亚洲资源在线免费观看| 亚洲春色av中文字幕| 亚洲色大WWW永久网站| 69国产精品成人aaaaa片| 精产国品一二三产品区别91| 欧美性感美女热舞视频| 亚洲精品国产99999| 亚洲自拍偷拍一区二区中文字幕 | 五月的婷婷综合视频| 亚洲制服丝袜美腿在线| 国产精品福利久久久久| 两个奶被揉得又硬又翘怎么回事| 天天操天天干天天舔天天| 91九色人妻在线播放| 超碰在线观看97资源| 亚洲综合色一区二区三区| 欧美日韩综合精品无人区| 成人超碰一区二区三区| 日本高清 中文字幕| 久久99久久99久久97的人| 青青青在线视频观看97| 国产免费久久精品99re丫丫| 亚洲最大的自拍偷拍网| 亚洲男人的天堂最新网址| 在线中文字幕人妻av| 亚洲国产精品一区51动漫| 91青青青国产免费高清| 51vv精品视频在线观看| 亚洲国产精品一区51动漫| 日本人妻少妇xxxxxxx| 啊~插得好快别揉我胸了视频| 人人妻人人爽人人摸| 亚洲综合熟女乱中文| 久久精品久久久久观看99水蜜桃| 在线观看中文字幕少妇av| 中文字幕人妻精品精品| 精品人妻 色中文熟女 oo| 亚洲字幕一区二区夜色av| 精品国产污污污污免费观看| 日韩成人免费观看电影| 免费在线观看视频啪啪| 麻豆午夜激情在线观看| 国产视频1区2区3区| 日本少妇人妻凌辱在线| 日本在线免费观看国产精品| 中文字幕日韩人妻在线三区| 熟妇人妻丰满久久久久久久| 天天日夜夜操人人爽| 成人资源中文在线观看| 亚洲一区二区精品三区视频| 国产极品气质外围av| 中文字幕欧美人妻在线.| 午夜亚洲国产精品中字| 亚洲色图日韩在线视频观看| 日本电影一级人妻在线播放四区| 性感美女极品18禁网站在线| 2018中文字字幕人妻| 日日躁夜夜躁狠狠操| 夜夜爽夜夜操夜夜爱| 一区二区三区不卡免费视频网站 | 亚洲无码专区中文字幕专区| 美国伦理片午夜理论片| 99精品久久一区二区| 亚洲人妻系列在线视频| 新香蕉视频香蕉视频2| 男人电影天堂在线观看| 亚洲人成小说网站色| 桃色成人开心激情网| 天天日夜夜操人人爽| 日本电影一级人妻在线播放四区| 国产视频1区2区3区| 中国特黄色性生活片| 亚av一二三在线观看| 亚洲a区在线免费观看| 岛国av成人午夜高清| 欧美日韩在线观看免费播放| 亚洲美女露隐私av一区二区精品| 特级aaaaa黄色片| 亚洲av毛片一区二区三区网| 午夜精品一区二区三区不卡顿| 国产午夜羞羞一区二区三区| 欧美日韩精品aaa| 在宿舍强奷两个清纯校花| 精品国产污污污污免费观看| 欧美成人少妇人妻精品| 豆豆专区操逼性视频在线| 大陆中文字幕视频在线| 夫妻黄色一级性生活片| 美利坚合众国av天堂| 中国精品人妻一区二区| 五月的婷婷综合视频| 亚洲av三级电影在线观看| 中字幕人妻熟女人妻a62v网| 亚洲第一区av中文字幕| 嗯~嗯~啊啊啊~高潮了软件| 国产 少妇 一区二区| 91精品91久久久久| 国产福利三级在线观看| 中文字幕在线观看亚洲情色| 夜夜操天天干夜夜操| 中文字幕一区二区三区久久久| av成人三级高清日韩| 欧美日韩高清片在线观看| 五月婷婷伊人久久中文字幕| 亚洲欧美日韩中文在线观看| av天堂新资源在线| 在线观看免费啪啪啪| 三级欧美日韩一区二区三区| 老色鬼精品视频在线观看播放| 538欧美在线观看一区二区三区 | 最新国产精品久久精品app| 在线人成视频免费观看尤物| 一区二区三区资源视频| www一区二区91| 麻豆国产91制片厂| av里面的动作是真进去吗| 又粗又长又硬又黄又爽| 亚洲18片综合国产av| 制服丝袜 中文字幕 日韩| aa福利影视在线观看| 欧美亚洲另类精品第一页| 黑人爆操女人免费视频| 91青青青国产免费高清| 黑人大巨屌操美女逼| 午夜精品秘一区二区三区| 荣立三等功退休有什么待遇| 亚洲熟女少妇中文字幕系列| 亚洲中文字幕在线av| 国产中文亚洲熟女日韩| 精品国产污污污污免费观看| 国产av在线免费视频| 国产视频成人自拍蝌蚪视频| 色欲AV蜜桃一区二区三| 国产精品成人免费电影| 亚洲春色av中文字幕| 亚洲成人动漫av在线| 色哟哟亚洲乱码国产乱码精品精| 伊人综合在线视频免费观看| 亚洲一区视频中文字幕在线播放| 日韩欧美一区二区三区免费看| 亚洲蜜桃久久久久久| 精品欧美黑人一区二区三区| 韩国一级片最火爆中文字幕| 亚洲理论在线a中文字幕97| 裸露视频免费在线观看| 免费在线小视频你懂的| 老司机伊人99久久精品| 不卡高清一区二区三区| 91超精品碰国产在线观看| 黄很色很在线免费视频网站| 国产高清视频www夜色资源| 久久国产半精品99精品国产| 午夜精品久久秘?18免费观看| 国产女主播在线观看一区| 九一精品人妻一区二区三区| 亚洲AV无码一二三四区在线播放| 一二区二区不卡视频| 日韩欧美黄色免费网站| 白白色在线免费视频发布视频| 亚洲成人中文无码在线| 美女扒开逼逼给你看| 亚洲人人爽人人澡起碰av| 青青免费观看视频| 亚洲欧美日韩电影一区| 国产精品视频网站污污污| 免费的啪啪视频软件| 欧美亚洲国产一区二区| av天堂hezyo| 有码一区二区三区四区五区| jandara在线观看| 亚洲无人区乱码中文字幕一区| 青青青在线视频观看97| 亚洲精品激情视频在线观看 | 开心激情五月天作爱片| 亚洲AV无码一二三四区在线播放| 免费24小时人妻视频| 午夜精品久久久久久久精品乱码| 亚洲日本欧美韩国另类综合| 50熟妇一区二区三区| 美女欧美视频在线观看免费| 久久久久高潮白浆久久| av大尺度一区二区三区| 91色哟哟视频在线观看| 国产资源网站在线播放| 伊人网在线观看 视频一区| 38av一区二区三区| 黄色片免费国产精品| 精品国产av虐杀两警花| 成人十欧美亚洲综合在线| 一区二区三区午夜福利在线| 精品国产人伦一区二区三区| 亚洲情色777中文字幕| 99色在线观看免费观看| 久久sm人妻中出精品一区二区| 欧美猛少妇色ⅹⅹⅹⅹⅹ猛叫| 好看的日本中文字幕在线观看二区| 欧美啪啪一区二区三区| 在线能看视频你懂的| 国产夫妻视频在线观看免费| 日本成年视频在线免费观看| 人妻被强av系列一区二区| 999久久久人妻精品一区| 一区二区三区国产精华液区别大吗| 欧美成人一二三在线网| 欧美日韩不卡视频合集| 青青草成人免费自拍视频| 性色蜜桃臀x88av天美传媒| 在线观看中文字幕视频成人| 国产精品乱码高清在线观看h| 国产一区二区三区四区精| 搞乱在线在线观看视频| 有码一区二区三区四区五区| 天天插天天透天天爽| 日产国产欧美精品另类| 精品人妻人人做人人爽| 久久久久国产精品二区| 老牛影视在线一区二区三区| 精久久久久久久久久久久 | 中文字幕中文字幕在线中…一区| 亚洲欧美综合另类最新| 两个人在一起靠逼啊啊啊| 亚洲AV无码久久精品国产一区老| 国色天香一二三期区别大象| 日本香港韩国三级黄色| 日本少妇精品免费视频| 中文字幕一区二区三区久久久| 欧美强奸视频在线观看| 亚洲理论在线a中文字幕97| 日本男女免费福利视频| 青青草成人免费自拍视频| 青青国产95免看视频| 天天日 天天舔 天天射| 久久国产半精品99精品国产| 亚洲欧美精品海量播放| 中文字幕在线字幕乱码怎么设置 | 午夜久久人妻一级内射av网址| 豆豆专区操逼性视频在线| 天堂av在线最新地址| 97cao在线视频| 韩国一级片最火爆中文字幕| 亚洲国产日韩a在线欧美| 中文乱码字幕人妻熟女人妻| 18禁男女啪啪啪无遮挡| 中文字幕在线免费观看人妻| 东北老女人熟女啪啪视频| 日本一区二区三区区别| 亚洲欧美韩国日本一区二区| 日本黄页在线观看视频| 免费啪啪啪网站在线观看| 快使劲弄我视频在线播放| 国产亚洲综合5388| 日本a级2020在线观看 | 农村大炕有肉大屁股熟妇| 日韩一级视频一区二区三区| 岳母的诱惑电影在线观看| 国内自拍第一区二区三区| 一区二区三区四区影片| 少妇被中出一区二区| 天堂av国产av伦理av| 视频免费在线观看网站| 亚洲欧美不卡专业视频| 精品日本少妇久久久| 青青在线视频看看| 啪啪啪网站免费在线看| 天天干天天操天天要| 汤姆提醒30秒中转进站口| 漂亮人妻口爆久久精品| 黄色av网址在线播放| 国产一区两区三区福利小视频| 久久午夜免费鲁丝片| 免费在线小视频你懂的| 999国产精品视频免费看| 亚洲国产日韩欧美一区二区三区,| 日韩久久九九精品视频| 人妻中文字幕亚洲在线| 黑鸡巴肏少妇逼视频|