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

我向《RocketMQ技術(shù)內(nèi)幕》一書的創(chuàng)始人請(qǐng)教了一個(gè)問題

開發(fā) 架構(gòu)
兩個(gè)一樣的Consumer Group的Consumer訂閱同一個(gè)Topic,但是是不同的tag,Consumer1訂閱Topic的tag1,Consumer2訂閱Topic的tag2,然后分別啟動(dòng)。

是這樣的,我在學(xué)習(xí)rocketmq的時(shí)候遇到了一個(gè)奇怪的問題,就是同一個(gè)消費(fèi)者組內(nèi)的消費(fèi)者訂閱同一個(gè)主題topic,不同的tag的時(shí)候看到一個(gè)消息丟失的問題

這個(gè)問題我也是向《RocketMQ技術(shù)內(nèi)幕》一書的作者丁威大哥,然后他給我解釋了我對(duì)于這個(gè)問題的困惑,我來給大家解釋一下

先給大家描述一下這個(gè)具體的內(nèi)容

兩個(gè)一樣的Consumer Group的Consumer訂閱同一個(gè)Topic,但是是不同的tag,Consumer1訂閱Topic的tag1,Consumer2訂閱Topic的tag2,然后分別啟動(dòng)。

這時(shí)候往Topic的tag1里發(fā)送10條數(shù)據(jù),Topic的tag2里發(fā)送10條。目測(cè)應(yīng)該是Consumer1和Consumer2分別收到對(duì)應(yīng)的10條消息。結(jié)果卻是只有Consumer2收到了消息,而且只收到了4-6條消息,不固定。

MQ底層數(shù)據(jù)結(jié)構(gòu)之精妙

圖片

RocketMQ專門按照Topic為每一個(gè)topic建立索引,方便消費(fèi)端按照topic進(jìn)行消費(fèi),其具體實(shí)現(xiàn)為消息隊(duì)列。

在RocketMQ中,ConsumeQueue的引入并不是為了提高消息寫入的性能,而是為消費(fèi)服務(wù)的。

消息消費(fèi)隊(duì)列中的每一個(gè)條目是一個(gè)定長(zhǎng)的,設(shè)計(jì)極具技巧性,其每個(gè)條目使用固定長(zhǎng)度(8字節(jié)commitlog物理偏移量、4字節(jié)消息長(zhǎng)度、8字節(jié)tag hashcode),這里不是存儲(chǔ)tag的原始字符串,而是存儲(chǔ)hashcode。

目的就是確保每個(gè)條目的長(zhǎng)度固定,可以使用訪問類似數(shù)組下標(biāo)的方式來快速定位條目,極大的提高了ConsumeQueue文件的讀取性能,這樣根據(jù)消費(fèi)進(jìn)度去訪問消息的方法為使用邏輯偏移量logicOffset * 20即可找到該條目的起始偏移量(consumequeue文件中的偏移量),然后讀取該偏移量后20個(gè)字節(jié)即得到了一個(gè)條目,無需遍歷consumequeue文件。

關(guān)于RocketMQ中的三個(gè)文件,來幫助RocketMQ完成如此高效率的偉業(yè),我也寫了一個(gè)文章來介紹這三個(gè)文件,大家可以看一下通過這三個(gè)文件徹底搞懂rocketmq的存儲(chǔ)原理

消息過濾實(shí)現(xiàn)機(jī)制

消費(fèi)端隊(duì)列存儲(chǔ)的是 tag 的 hashcode,眾所周知,不同的字符串得到的hashcode值可能一樣,故在服務(wù)端是無法精確對(duì)消息進(jìn)行過濾的,所以在RocketMQ中會(huì)進(jìn)行兩次消息過濾。

當(dāng)客戶端向服務(wù)端拉取消息時(shí),服務(wù)端在返回消息之前,會(huì)先根據(jù)hashcode進(jìn)行過濾,然后客戶端收到服務(wù)端的消息后,再根據(jù)消息的tag字符串進(jìn)行精確過濾。

上面的原理很好理解呀,那為什么會(huì)丟失消息呢?這其實(shí)和消息隊(duì)列負(fù)載機(jī)制有關(guān)。

在RocketMQ中使用集群模式消費(fèi)時(shí),同一個(gè)消費(fèi)組中的多個(gè)消費(fèi)者共同完成主題中的隊(duì)列的消費(fèi),即一個(gè)消費(fèi)者只會(huì)分配到其中某幾個(gè)隊(duì)列,并且同一時(shí)間,一個(gè)隊(duì)列只會(huì)分配給一個(gè)消費(fèi)者,這樣結(jié)合上面的的過濾機(jī)制,就會(huì)明顯有問題,請(qǐng)看示例圖:

圖片

其問題的核心關(guān)鍵是,同一個(gè)tag會(huì)分布在不同的隊(duì)列中,但消費(fèi)者C1分配到的隊(duì)列為q0,q1,q0,q1中有taga和tagb的消息,但tagb的消息會(huì)被消費(fèi)者C1過濾,但這部分消息卻不會(huì)被C2消費(fèi),造成了消息丟失。

所以在RocketMQ中,一個(gè)消費(fèi)組內(nèi)的所有消費(fèi)這,其訂閱關(guān)系必須保持一致。

我們?cè)賮砘剡^頭看這個(gè)問題

首先這是Broker決定的,而不是Consumer端決定的

Consumer端發(fā)心跳給Broker,Broker收到后存到consumerTable里(就是個(gè)Map),key是GroupName,value是ConsumerGroupInfo。

ConsumerGroupInfo里面是包含topic等信息的,但是問題就出在上一步驟,key是groupName,你同GroupName的話Broker心跳最后收到的Consumer會(huì)覆蓋前者的。相當(dāng)于如下代碼:

map.put(groupName, ConsumerGroupInfo);

這樣同key,肯定產(chǎn)生了覆蓋。所以Consumer1不會(huì)收到任何消息,但是Consumer2為什么只收到了一半(不固定)消息呢?

那是因?yàn)椋耗闶羌耗J较M(fèi),它會(huì)負(fù)載均衡分配到各個(gè)節(jié)點(diǎn)去消費(fèi),所以一半消息(不固定個(gè)數(shù))跑到了Consumer1上,結(jié)果Consumer1訂閱的是tag1,所以不會(huì)任何輸出。

如果換成BROADCASTING,那絕逼后者會(huì)收到全部消息,而不是一半,因?yàn)閺V播是廣播全部Consumer。

/**
* Consumer信息
*/
public class ConsumerGroupInfo {
// 組名
private final String groupName;
// topic信息,比如topic、tag等
private final ConcurrentMap<String/* Topic */, SubscriptionData> subscriptionTable =
new ConcurrentHashMap<String, SubscriptionData>();
// 客戶端信息,比如clientId等
private final ConcurrentMap<Channel, ClientChannelInfo> channelInfoTable =
new ConcurrentHashMap<Channel, ClientChannelInfo>(16);
// PULL/PUSH
private volatile ConsumeType consumeType;
// 消費(fèi)模式:BROADCASTING/CLUSTERING
private volatile MessageModel messageModel;
// 消費(fèi)到哪了
private volatile ConsumeFromWhere consumeFromWhere;
}
/**
* 通過心跳將Consumer信息注冊(cè)到Broker端。
*/
public boolean registerConsumer(final String group, final ClientChannelInfo clientChannelInfo,
ConsumeType consumeType, MessageModel messageModel, ConsumeFromWhere consumeFromWhere,
final Set<SubscriptionData> subList, boolean isNotifyConsumerIdsChangedEnable) {
// consumerTable:維護(hù)所有的Consumer
ConsumerGroupInfo consumerGroupInfo = this.consumerTable.get(group);
// 如果沒有Consumer,則put到map里
if (null == consumerGroupInfo) {
ConsumerGroupInfo tmp = new ConsumerGroupInfo(group, consumeType, messageModel, consumeFromWhere);
// put到map里
ConsumerGroupInfo prev = this.consumerTable.putIfAbsent(group, tmp);
consumerGroupInfo = prev != null ? prev : tmp;
}
// 更新Consumer信息,客戶端信息
boolean r1 =
consumerGroupInfo.updateChannel(clientChannelInfo, consumeType, messageModel,
consumeFromWhere);
// 更新訂閱Topic信息
boolean r2 = consumerGroupInfo.updateSubscription(subList);
if (r1 || r2) {
if (isNotifyConsumerIdsChangedEnable) {
this.consumerIdsChangeListener.handle(ConsumerGroupEvent.CHANGE, group, consumerGroupInfo.getAllChannel());
}
}
this.consumerIdsChangeListener.handle(ConsumerGroupEvent.REGISTER, group, subList);
return r1 || r2;
}

從這一步可以看出消費(fèi)者信息是以groupName為key,ConsumerGroupInfo為value存到map(consumerTable)里的,那很明顯了,后者肯定會(huì)覆蓋前者的,因?yàn)閗ey是一樣的。

而后者的tag是tag2,那肯定覆蓋了前者的tag1,這部分是存到ConsumerGroupInfo的subscriptionTable里面的。

private final ConcurrentMap<String/* Topic */, SubscriptionData> subscriptionTable =
new ConcurrentHashMap<String, SubscriptionData>();

SubscriptionData包含了topic等信息

public class SubscriptionData implements Comparable<SubscriptionData> {
// topic
private String topic;
private String subString;
// tags
private Set<String> tagsSet = new HashSet<String>();
private Set<Integer> codeSet = new HashSet<Integer>();
}

其實(shí)到這里,這個(gè)問題已經(jīng)算是解決了七八成了,等同于是后來的消費(fèi)者的注冊(cè)信息會(huì)把之前的消費(fèi)者的注冊(cè)信息覆蓋掉,這也就導(dǎo)致了上述出現(xiàn)的現(xiàn)象。

先啟動(dòng)訂閱了tag1的消費(fèi)者,然后啟動(dòng)了訂閱了tag2的消費(fèi)者,這時(shí)最新的心跳信息是來源于tag2的這個(gè)消費(fèi)者,這就導(dǎo)致了這個(gè)消費(fèi)者的訂閱信息會(huì)覆蓋掉之前的訂閱信息,這是因?yàn)樵赗ocketMQ中會(huì)認(rèn)為同一個(gè)消費(fèi)者組的消費(fèi)者的訂閱信息是需要保持一致的,如果不保持一致是不被允許的做法。

如果真有那種,你去新建一個(gè)topic不就好了,或者新建一個(gè)消費(fèi)者組不就好了,在使用的過程中一定要保持消費(fèi)者組的訂閱信息保持一致。

這也就導(dǎo)致了發(fā)送者發(fā)送的tag1的消息壓根不會(huì)被這個(gè)消費(fèi)者接收到,而兩個(gè)消費(fèi)者自然不會(huì)消費(fèi)這個(gè)的消息。

而為什么只收到tag2的部分消息

這是因?yàn)閞ocketMQ默認(rèn)采用的是集群消費(fèi)的模式,也就是生產(chǎn)者的消息會(huì)通過負(fù)載均衡將消息均勻的發(fā)送到多個(gè)consumerqueue隊(duì)列中,默認(rèn)是4個(gè),也就是我們啟動(dòng)的兩個(gè)消費(fèi)者會(huì)分別監(jiān)聽兩個(gè)consumerqueue隊(duì)列

這也就意味著有大約一半的tag2的消息會(huì)被運(yùn)送到消費(fèi)者1的機(jī)器上消費(fèi),而消費(fèi)者1監(jiān)聽的是tag1,不滿足消息的條件,所以監(jiān)聽不到消息

topic和tag信息是如何覆蓋的

/**
* 其實(shí)很簡(jiǎn)單,就是以topic為key,SubscriptionData為value。而SubscriptionData里包含了tags信息,所以直接覆蓋掉
*/
public boolean updateSubscription(final Set<SubscriptionData> subList) {
for (SubscriptionData sub : subList) {
SubscriptionData old = this.subscriptionTable.get(sub.getTopic());
if (old == null) {
SubscriptionData prev = this.subscriptionTable.putIfAbsent(sub.getTopic(), sub);
} else if (sub.getSubVersion() > old.getSubVersion()) {
this.subscriptionTable.put(sub.getTopic(), sub);
}
}
}

本文參考文章:

https://codingw.blog.csdn.net/article/details/116299837。

https://dalin.blog.csdn.net/article/details/107241375。

責(zé)任編輯:姜華 來源: 左耳君
相關(guān)推薦

2014-09-16 10:49:54

MineCraft微軟

2013-08-09 10:44:55

創(chuàng)始人創(chuàng)業(yè)獨(dú)立創(chuàng)業(yè)

2014-04-22 10:52:00

Github開源

2014-10-24 10:17:56

程序員

2010-06-17 15:43:50

UML創(chuàng)始人

2014-10-23 09:03:40

創(chuàng)業(yè)合伙人

2013-05-13 16:45:37

創(chuàng)業(yè)LinkedIn創(chuàng)始人

2010-11-08 14:11:04

云計(jì)算Spring框架創(chuàng)始人

2013-04-23 10:00:45

創(chuàng)業(yè)創(chuàng)始人

2015-09-07 13:46:29

技術(shù)聯(lián)合創(chuàng)始人

2014-11-19 11:50:39

OneAPM

2009-07-02 08:59:56

ubuntuLinux開源

2010-05-04 16:22:45

Unix系統(tǒng)

2013-01-09 17:19:45

Win 8操作系統(tǒng)

2013-08-05 10:57:21

編程學(xué)習(xí)

2010-09-14 09:23:57

jQuery

2020-04-01 09:00:56

容器安全操作

2021-02-20 08:30:40

Netflix996文化

2013-04-08 10:38:00

2013-02-21 08:35:42

蘋果云計(jì)算數(shù)據(jù)中心
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产成+人+综合+亚洲欧洲| 欧美激情一区二区三区| 在线观看亚洲免费视频| 无码任你躁久久久久久久| 欧美美乳视频| 欧美日本在线观看| 国产精品视频网站在线观看| 日韩欧美在线番号| 久久精品国产久精国产爱| 欧美激情第三页| 欧美18—19性高清hd4k| 1204国产成人精品视频| 在线看不卡av| 99在线免费视频观看| 北岛玲一区二区三区| 成人一道本在线| 国产女人18毛片水18精品| 国产无码精品在线播放| 国产精品videosex性欧美| 日韩av影视在线| 亚洲欧美天堂在线| 三上悠亚一区二区| 亚洲成人精品一区| 免费看av软件| av在线天堂| 久久在线观看免费| 国产精品二区在线| 一级特黄aaa大片| 欧美中文日韩| 97在线免费观看视频| 日韩欧美综合视频| 99成人超碰| 国产午夜精品免费一区二区三区| 制服丝袜av在线| 精品一区91| 欧美精品一级二级三级| wwww.国产| 3d欧美精品动漫xxxx无尽| 五月激情六月综合| 国产亚洲黄色片| 日本大胆在线观看| 一区二区三区不卡视频| 在线观看免费黄色片| 麻豆网站在线免费观看| 中国av一区二区三区| 日本不卡一区| 触手亚洲一区二区三区| 久久久精品人体av艺术| 久久亚裔精品欧美| 日韩一级免费在线观看| 黄色av免费播放| 久久91成人| 亚洲美女激情视频| 日韩精品卡通动漫网站| 亚洲精品进入| 国产一区二区三区在线观看网站 | 久久综合激情| 日本不卡高字幕在线2019| 永久免费看片在线播放| 亚洲美女毛片| 欧美中文字幕在线观看| 日韩综合在线观看| 日韩高清不卡一区二区| 国产精品色视频| 一级做a爰片久久毛片16| 麻豆精品久久精品色综合| 成人h猎奇视频网站| 国产精品无码免费播放| 国产高清一区日本| 国产欧美日韩亚洲| 久久电影中文字幕| 国产精品久久久久影院| 精品国产无码在线| 牛牛精品在线视频| 色综合天天做天天爱| 一区二区三区 日韩| 国产精品一区二区三区av| 欧美成人猛片aaaaaaa| 中文字幕日韩三级片| 国产欧美日韩精品高清二区综合区| 一区二区日韩精品| 日韩a级片在线观看| 亚洲另类黄色| 国产精品青青在线观看爽香蕉 | 亚洲欧洲精品一区| 在线播放免费av| 日韩欧美国产一区二区| 老司机久久精品| 久久精品色播| 色黄久久久久久| 国产精品成人久久| 日韩电影免费一区| 国产激情一区二区三区在线观看 | 51精品国产| 亚洲一区二区久久久| 久久久久久久极品内射| 性欧美xxxx大乳国产app| 国产一区视频在线播放| 日日躁夜夜躁白天躁晚上躁91| 久久精品亚洲乱码伦伦中文 | 亚洲做受高潮无遮挡| 日韩欧美视频| 97av在线播放| 国产免费一区二区三区最新不卡 | 日本不卡123| 国产91aaa| 色视频在线免费观看| 午夜在线成人av| 国产精欧美一区二区三区白种人| 国偷自产av一区二区三区| 色偷偷综合社区| 国产精品自拍99| 国产精品白丝av| 亚洲欧美国产精品桃花| 无码小电影在线观看网站免费 | 国产精品一二三在线| 国产深喉视频一区二区| 久久久青草青青国产亚洲免观| 9191国产视频| 国产精品美女久久久久人| 亚洲视频在线观看视频| 四虎成人精品永久免费av| 国产在线精品免费| 亚洲欧洲免费无码| 欧美日韩免费观看视频| 亚洲精品不卡在线| 亚洲一区二区三区色| 久久香蕉av| 欧美电影一区二区| 亚洲国产天堂av| 亚洲看片免费| 韩日午夜在线资源一区二区| 视频在线这里都是精品| 欧美精品视频www在线观看| 强伦人妻一区二区三区| 国产精品中文字幕制服诱惑| 欧美成人亚洲成人| 国产精品欧美久久久久天天影视 | 精品一区二区视频| 超碰中文在线| 亚洲精品在线网站| 久久久久噜噜噜亚洲熟女综合| 卡一卡二国产精品| 亚洲乱码一区二区三区| 99久久久国产精品免费调教网站| 亚洲剧情一区二区| 800av免费在线观看| 91在线观看下载| jizzjizzxxxx| 蜜臀av免费一区二区三区| 欧美有码在线观看视频| 欧美精品久久久久久久久久丰满| 福利视频一区二区| 中文字幕人妻一区二区| 丝袜美腿亚洲一区| 日韩精品一区二区三区色偷偷| **在线精品| 亚洲网在线观看| 中文字幕一区二区三区四区免费看 | 欧美日韩亚洲视频| 国产免费看av| 奇米精品一区二区三区在线观看 | av在线电影观看| 欧美日韩日日骚| 婷婷伊人五月天| 粉嫩久久99精品久久久久久夜| 日韩精品一区二区在线视频| 大伊香蕉精品在线品播放| 国产91精品高潮白浆喷水| 免费成人av电影| 欧美日韩dvd在线观看| 欧美人禽zoz0强交| 97久久人人超碰| 午夜激情福利在线| 日韩xxxxxxxxx| 欧美+亚洲+精品+三区| 成人免费看片网站| 松下纱荣子在线观看| 国产亚洲欧洲高清一区| 国产精品老熟女视频一区二区| 亚洲资源在线观看| 欧美日韩高清丝袜| 国产剧情av麻豆香蕉精品| 黄色一级片在线看| 欧美少妇xxxx| 国产精品免费一区二区三区| 毛片免费看不卡网站| 久久精品视频中文字幕| 无码国产色欲xxxx视频| 欧美日韩一二区| 精品少妇久久久| 中文字幕的久久| 一边摸一边做爽的视频17国产| 视频一区在线播放| 成人高清dvd| 精品视频97| 国产精品麻豆免费版| 欧美电影免费观看高清完整| 久久综合伊人77777蜜臀| 日本福利在线观看| 日韩精品综合一本久道在线视频| 日本久久综合网| 亚洲一区免费观看| 91香蕉国产视频| 91在线观看一区二区| 少妇熟女视频一区二区三区| 日韩国产欧美在线播放| 欧美a级黄色大片| 欧美色图一区| 久久久久久九九九九| 亚洲成人影音| 国产日本欧美视频| 肉色欧美久久久久久久免费看| 欧美激情久久久久| 欧美69xxx| 亚洲午夜激情免费视频| 手机在线精品视频| 欧美一区二区免费观在线| 69xxxx国产| 图片区日韩欧美亚洲| 91视频综合网| 国产精品免费aⅴ片在线观看| 亚洲av成人无码一二三在线观看| 国内一区二区视频| www.精品在线| 久久久久久夜| 男女超爽视频免费播放| 欧美三级特黄| 最近免费观看高清韩国日本大全| 国产一区二区三区四区大秀| 国语精品中文字幕| 国产精品巨作av| 99久久国产免费免费| 亚洲国产91视频| 国产精品亚洲第一区| 成人免费看黄| 日本aⅴ大伊香蕉精品视频| 这里有精品可以观看| 午夜精品福利视频| 98色花堂精品视频在线观看| 欧美激情va永久在线播放| 1769免费视频在线观看| 久久精品最新地址| h片在线免费| 久久不射电影网| www在线视频| 九色成人免费视频| 成人午夜在线影视| 久久精品国产91精品亚洲| 九七久久人人| 久久不射电影网| 欧美人与禽性xxxxx杂性| 欧美国产高跟鞋裸体秀xxxhd| 亚洲综合影视| 欧美日韩国产成人高清视频| 国产乱码在线| 7m精品福利视频导航| 日韩伦理精品| 国产精品高清在线| 欧美大陆国产| 亚洲自拍偷拍第一页| 亚洲超碰在线观看| 久久99九九| 精品国产一区二区三区久久久樱花| 日韩欧美亚洲在线| 91日韩在线| 久久www视频| 在线亚洲成人| 一道本视频在线观看| 国产美女久久久久| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 中文字幕不卡在线观看| 5566中文字幕| 亚洲高清在线精品| 欧美黑人一区二区| 欧美色国产精品| aaa一区二区| 日韩电影网在线| jizz视频在线观看| 欧美伦理91i| 黄色成人免费网| 91麻豆国产精品| 欧美丝袜足交| 一区一区视频| 中文久久精品| 欧美国产日韩另类 | 玖玖在线精品| 国产精品久久久久久久99| k8久久久一区二区三区| 青青青视频在线播放| 亚洲综合清纯丝袜自拍| 国产一级一级国产| 欧美一区二区在线免费播放| 日本福利午夜视频在线| 美女啪啪无遮挡免费久久网站| 美女91在线看| 亚洲sss综合天堂久久| 神马香蕉久久| 国产资源第一页| 日韩精品亚洲专区| 一区二区三区四区影院| 国产精品欧美一区二区三区| 日韩精品久久久久久久| 欧美美女黄视频| 麻豆国产在线播放| 久久久久久久久久婷婷| 欧美系列精品| 欧美精品七区| 精品91在线| 亚洲欧美日本一区二区| 亚洲国产精品成人综合| 国产精品美女久久久久av爽| 欧美一区二区三区免费视频| 成人亚洲综合天堂| 2019中文字幕在线免费观看| 狂野欧美xxxx韩国少妇| 亚洲国产另类久久久精品极度| 亚洲最黄网站| 欧美性生交xxxxx| 亚洲色图欧美激情| 在线观看毛片视频| 亚洲香蕉成视频在线观看| 久久久男人天堂| 国产精品久久精品视| 欧美a级片一区| 国产欧美激情视频| 国产精品美女久久久久久 | 日本无删减在线| 成人亚洲欧美一区二区三区| 欧美三级三级| 国产成人手机视频| 久久久久国产精品免费免费搜索| 日韩成人av毛片| 欧美sm极限捆绑bd| 日本大片在线播放| 不卡视频一区二区| 欧美人成在线| 成人啪啪18免费游戏链接| 一区二区在线看| www.亚洲欧美| 欧美激情三级免费| caoporn成人| 国产美女主播在线| 成人黄色av电影| 久久久久久av无码免费网站| 亚洲同志男男gay1069网站| 亚洲free嫩bbb| 亚洲精品小说| 欧美人与性动交α欧美精品| 亚洲免费视频成人| www.色呦呦| 国模视频一区二区| 色88888久久久久久影院| 波多野结衣50连登视频| 久久综合资源网| 亚洲大尺度在线观看| 中文字幕亚洲专区| japansex久久高清精品| 一本二本三本亚洲码| 国产成人免费xxxxxxxx| 久青草免费视频| 亚洲精品久久久久久久久久久久久| 在线观看爽视频| 日本不卡在线观看| 精品一区二区三区蜜桃| 免费在线一区二区三区| 日韩大陆毛片av| 成人久久网站| 国产日韩欧美大片| 不卡影院免费观看| 久久精品视频7| 色av吧综合网| 综合久久成人| 国产精品动漫网站| 国产精品狼人久久影院观看方式| 国产精品亚洲lv粉色| 久久久爽爽爽美女图片| 国产日韩视频在线| 国产欧美激情视频| 欧美日韩国产一区中文午夜| 1024视频在线| 黄色91av| 久久精品国产亚洲a| 国产午夜精品一区二区理论影院| 亚洲精品有码在线| 久久国产精品美女| 国产免费成人在线| 亚洲免费在线电影| 国产精品麻豆一区二区三区 | 白嫩白嫩国产精品| 北条麻妃在线一区| 亚洲精品国产品国语在线app| 天堂中文字幕在线| 成人国产在线激情| 欧美亚洲一区二区三区| 欧美成人一二三区| 一区二区欧美久久| 欧美亚洲国产日韩| 永久免费看片在线观看| 欧美在线免费视屏|