久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

.Net Core和RabbitMQ限制循環消費的方法

瀏覽:695日期:2022-06-09 11:06:55
目錄
  • 前言
  • 循環場景
  • 解決方案
  • 一次消費
  • 消息不重入隊列
  • 限定重試次數
    • 消息頭設定次數
    • 存儲重試次數
    • 隊列使用Quorum類型
    • 隊列消息過期
  • 參考資料

    前言

    當消費者端接收消息處理業務時,如果出現異?;蚴蔷苁障⑾⒂肿兏鼮榈却哆f再次推送給消費者,這樣一來,則形成循環的條件。

    循環場景

    生產者發送100條消息到RabbitMQ中,消費者設定讀取到第50條消息時,設置拒收,同時設定是否還留存在當前隊列中(當requeue為false時,設置了死信隊列則進入死信隊列,否則移除消息)。

    consumer.Received += (model, ea) =>{? ? var message = ea.Body;? ? Console.WriteLine("接收到信息為:" + Encoding.UTF8.GetString(message.ToArray()));? ? if (Encoding.UTF8.GetString(message.ToArray()).Contains("50"))? ? {? ? ? ? Console.WriteLine("拒收");? ? ? ? ((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: true);? ? ? ? return;? ? }? ? ((EventingBasicConsumer)model).Model.BasicAck(ea.DeliveryTag, multiple: false);};

    當第50條消息拒收,則仍在隊列中且處在隊列頭部,重新推送給消費者,再次拒收,再次推送,反反復復。

    最終其他消息全部消費完畢,僅剩第50條消息往復間不斷消費,拒收,消費,這將可能導致RabbitMQ出現內存泄漏問題。

    解決方案

    RabbitMQ及AMQP協議本身沒有提供這類重試功能,但可以利用一些已有的功能來間接實現重試限定(以下只考慮基于手動確認模式情況)。此處只想到或是只查到了如下幾種方案解決消息循環消費問題。

    • 一次消費
      • 無論成功與否,消費者都對外返回ack,將拒收原因或是異常信息catch存入本地或是新隊列中另作重試。
      • 消費者拒絕消息或是出現異常,返回Nack或Reject,消息進入死信隊列或丟棄(requeue設定為false)。
    • 限定重試次數
      • 在消息的頭中添加重試次數,并將消息重新發送出去,再每次重新消費時從頭中判斷重試次數,遞增或遞減該值,直到達到限制,requeue改為false,最終進入死信隊列或丟棄。
      • 可以在Redis、Memcache或其他存儲中存儲消息唯一鍵(例如Guid、雪花Id等,但必須在發布消息時手動設置它),甚至在mysql中連同重試次數一起存儲,然后在每次重新消費時遞增/遞減該值,直到達到限制,requeue改為false,最終進入死信隊列或丟棄。
      • 隊列使用Quorum類型,限制投遞次數,超過次數消息被刪除。
    • 隊列消息過期
      • 設置過期時間,給隊列或是消息設置TTL,重試一定次數消息達到過期時間后進入死信隊列或丟棄(requeue設定為true)。
    • 也許還有更多好的方案...

    一次消費

    對外總是Ack

    消息到達了消費端,可因某些原因消費失敗了,對外可以發送Ack,而在內部走額外的方式去執行補償操作,比如將消息轉發到內部的RabbitMQ或是其他處理方式,終歸是只消費一次。

    var queueName = "alwaysack_queue";channel.QueueDeclare(queue: queueName, durable: false, exclusive: false, autoDelete: false, arguments: null);channel.BasicQos(0, 5, false);var consumer = new EventingBasicConsumer(channel);consumer.Received += (model, ea) =>{? ? try? ? {? ? ? ? var message = ea.Body;? ? ? ? Console.WriteLine("接收到信息為:" + Encoding.UTF8.GetString(message.ToArray()));? ? ? ? if (Encoding.UTF8.GetString(message.ToArray()).Contains("50"))? ? ? ? {? ? ? ? ? ? throw new Exception("模擬異常");? ? ? ? }? ? }? ? catch (Exception ex)? ? {? ? ? ? Console.WriteLine(ex.Message);? ? }? ? finally? ? {? ? ? ? ((EventingBasicConsumer)model).Model.BasicAck(ea.DeliveryTag, multiple: false);? ? }};channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);

    當消費端收到消息,處理時出現異常,可以另想辦法去處理,而對外保持著ack的返回,以避免消息的循環消費。

    消息不重入隊列

    在消費者端,因異?;蚴蔷苁障r,對requeue設置為false時,如果設置了死信隊列,則符合“消息被拒絕且不重入隊列”這一進入死信隊列的情況,從而避免消息反復重試。如未設置死信隊列,則消息被丟失。

    此處假定接收100條消息,在接收到第50條消息時設置拒收,并且設置了requeue為false。

    var dlxExchangeName = "dlx_exchange";channel.ExchangeDeclare(exchange: dlxExchangeName, type: "fanout", durable: false, autoDelete: false, arguments: null);var dlxQueueName = "dlx_queue";channel.QueueDeclare(queue: dlxQueueName, durable: false, exclusive: false, autoDelete: false, arguments: null);channel.QueueBind(queue: dlxQueueName, exchange: dlxExchangeName, routingKey: "");var queueName = "nackorreject_queue";var arguments = new Dictionary<string, object>{    { "x-dead-letter-exchange", dlxExchangeName }};channel.QueueDeclare(queue: queueName, durable: false, exclusive: false, autoDelete: false, arguments: arguments);channel.BasicQos(0, 5, false);var consumer = new EventingBasicConsumer(channel);consumer.Received += (model, ea) =>{    var message = ea.Body;    Console.WriteLine("接收到信息為:" + Encoding.UTF8.GetString(message.ToArray()));    if (Encoding.UTF8.GetString(message.ToArray()).Contains("50"))    {Console.WriteLine("拒收");((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: false);//關鍵在于requeue=falsereturn;    }    ((EventingBasicConsumer)model).Model.BasicAck(ea.DeliveryTag, multiple: false);};channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);

    如此一來,拒收消息不會重入隊列,并且現有隊列綁定了死信交換機,因此,消息進入到死信隊列中,如不綁定,則消息丟失。

    限定重試次數

    設置重試次數,限定循環消費的次數,允許短暫的循環,但最終打破循環。

    消息頭設定次數

    在消息頭中設置次數記錄作為標記,但是,消費端無法對接收到的消息修改消息頭然后將原消息送回MQ,因此,需要將原消息內容重新發送消息到MQ,具體步驟如下

    • 原消息設置不重入隊列。
    • 再發送新的消息其內容與原消息一致,可設置新消息的消息頭來攜帶重試次數。
    • 消費端再次消費時,便可從消息頭中查看消息被消費的次數。

    此處假定接收10條消息,在接收到第5條消息時設置拒收, 當消息頭中重試次數未超過設定的3次時,消息可以重入隊列,再次被消費。

    var queueName = "messageheaderretrycount_queue";channel.QueueDeclare(queue: queueName, durable: false, exclusive: false, autoDelete: false, arguments: null);channel.BasicQos(0, 5, false);var consumer = new EventingBasicConsumer(channel);consumer.Received += (model, ea) =>{? ? var message = ea.Body;? ? Console.WriteLine("接收到信息為:" + Encoding.UTF8.GetString(message.ToArray()));? ? if (Encoding.UTF8.GetString(message.ToArray()).Contains("5"))? ? {? ? ? ? var maxRetryCount = 3;? ? ? ? Console.WriteLine($"拒收 {DateTime.Now}");? ? ? ? //初次消費? ? ? ? if (ea.BasicProperties.Headers == null)? ? ? ? {? ? ? ? ? ? //原消息設置為不重入隊列? ? ? ? ? ? ((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: false);? ? ? ? ? ? //發送新消息到隊列中? ? ? ? ? ? RetryPublishMessage(channel, queueName, message.ToArray(), 1);? ? ? ? ? ? return;? ? ? ? }? ? ? ? //獲取重試次數? ? ? ? var retryCount = ParseRetryCount(ea);? ? ? ? if (retryCount < maxRetryCount)? ? ? ? {? ? ? ? ? ? //原消息設置為不重入隊列? ? ? ? ? ? ((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: false);? ? ? ? ? ? //發送新消息到隊列中? ? ? ? ? ? RetryPublishMessage(channel, queueName, message.ToArray(), retryCount + 1);? ? ? ? ? ? return;? ? ? ? }? ? ? ? //到達最大次數,不再重試消息? ? ? ? ((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: false);? ? ? ? return;? ? }? ? ((EventingBasicConsumer)model).Model.BasicAck(ea.DeliveryTag, multiple: false);};channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);static void RetryPublishMessage(IModel channel, string queueName, byte[] body, int retryCount){? ? var basicProperties = channel.CreateBasicProperties();? ? basicProperties.Headers = new Dictionary<string, object>();? ? basicProperties.Headers.Add("retryCount", retryCount);? ? channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: basicProperties, body: body);}static int ParseRetryCount(BasicDeliverEventArgs ea){? ? var existRetryRecord = ea.BasicProperties.Headers.TryGetValue("retryCount", out object retryCount);? ? if (!existRetryRecord)? ? {? ? ? ? throw new Exception("沒有設置重試次數");? ? }? ? return (int)retryCount;}

    消息被拒收后,再重新發送消息到原有交換機或是隊列下中,以使得消息像是消費失敗回到了隊列中,如此來控制消費次數,但是這種場景下,新消息排在了隊列的尾部,而不是原消息排在隊列頭部。

    存儲重試次數

    在存儲服務中存儲消息的唯一標識與對應重試次數,消費消息前對消息進行判斷是否存在。

    與消息頭判斷一致,只是消息重試次數的存儲從消息本身挪入存儲服務中了。需要注意的是,消息發送端需要設置消息的唯一標識(MessageId屬性)

    //模擬外部存儲服務var MessageRetryCounts = new Dictionary<ulong, int>();var queueName = "storageretrycount_queue";channel.QueueDeclare(queue: queueName, durable: false, exclusive: false, autoDelete: false, arguments: null);channel.BasicQos(0, 5, false);var consumer = new EventingBasicConsumer(channel);consumer.Received += (model, ea) =>{? ? var message = ea.Body;? ? Console.WriteLine("接收到信息為:" + Encoding.UTF8.GetString(message.ToArray()));    if (Encoding.UTF8.GetString(message.ToArray()).Contains("50"))    {    ? ? var maxRetryCount = 3;    ? ? Console.WriteLine("拒收");        ? ? //重試次數判斷    ? ? var existRetryRecord = MessageRetryCounts.ContainsKey(ea.BasicProperties.MessageId);    ? ? if (!existRetryRecord)    ? ? {    ? ? ? ? //重入隊列,繼續重試    ? ? ? ? MessageRetryCounts.Add(ea.BasicProperties.MessageId, 1);    ? ? ? ? ((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: true);    ? ? ? ? return;    ? ? }        ? ? if (MessageRetryCounts[ea.BasicProperties.MessageId] < maxRetryCount)    ? ? {    ? ? ? ? //重入隊列,繼續重試    ? ? ? ? MessageRetryCounts[ea.BasicProperties.MessageId] = MessageRetryCounts[ea.BasicProperties.MessageId] + 1;    ? ? ? ? ((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: true);    ? ? ? ? return;    ? ? }        ? ? //到達最大次數,不再重試消息    ? ? ((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: false);    ? ? return;    }? ? ((EventingBasicConsumer)model).Model.BasicAck(ea.DeliveryTag, multiple: false);};channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);

    除第一次拒收外,允許三次重試機會,三次重試完畢后,設置requeue為false,消息丟失或進入死信隊列(如有設置的話)。

    隊列使用Quorum類型

    第一種和第二種分別是消息自身、外部存儲服務來管理消息重試次數,使用Quorum,由MQ來限定消息的投遞次數,也就控制了重試次數。

    設置隊列類型為quorum,設置投遞最大次數,當超過投遞次數后,消息被丟棄。

    var queueName = "quorumtype_queue";var arguments = new Dictionary<string, object>(){? ? { "x-queue-type", "quorum"},? ? { "x-delivery-limit", 3 }};channel.QueueDeclare(queue: queueName, durable: true, exclusive: false, autoDelete: false, arguments: arguments);channel.BasicQos(0, 5, false);var consumer = new EventingBasicConsumer(channel);consumer.Received += (model, ea) =>{? ? var message = ea.Body;? ? Console.WriteLine("接收到信息為:" + Encoding.UTF8.GetString(message.ToArray()));? ? if (Encoding.UTF8.GetString(message.ToArray()).Contains("50"))? ? {? ? ? ? Console.WriteLine($"拒收 {DateTime.Now}");? ? ? ? ((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: true);? ? ? ? return;? ? }? ? ((EventingBasicConsumer)model).Model.BasicAck(ea.DeliveryTag, multiple: false);};channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);

    第一次消費被拒收重入隊列后,經最大三次投遞后,消費端不再收到消息,如此一來也限制了消息的循環消費。

    隊列消息過期

    當為消息設置了過期時間時,當消息沒有受到Ack,且還在隊列中,受到過期時間的限制,反復消費但未能成功時,消息將走向過期,進入死信隊列或是被丟棄。

    聚焦于過期時間的限制,因此在消費者端,因異常或是拒收消息時,需要對requeue設置為true,將消息再次重入到原隊列中。

    設定消費者端第五十條消息會被拒收,且隊列的TTL設置為5秒。

    //死信交換機和死信隊列var dlxExchangeName = "dlx_exchange";channel.ExchangeDeclare(exchange: dlxExchangeName, type: "fanout", durable: false, autoDelete: false, arguments: null);var dlxQueueName = "dlx_queue";channel.QueueDeclare(queue: dlxQueueName, durable: false, exclusive: false, autoDelete: false, arguments: null);channel.QueueBind(queue: dlxQueueName, exchange: dlxExchangeName, routingKey: "");//常規隊列var queueName = "normalmessage_queue";var arguments = new Dictionary<string, object>{? ? { "x-message-ttl", 5000},? ? { "x-dead-letter-exchange", dlxExchangeName }};channel.QueueDeclare(queue: queueName, durable: false, exclusive: false, autoDelete: false, arguments: arguments);channel.BasicQos(0, 5, false);var consumer = new EventingBasicConsumer(channel);consumer.Received += (model, ea) =>{? ? var message = ea.Body;? ? Console.WriteLine("接收到信息為:" + Encoding.UTF8.GetString(message.ToArray()));? ? if (Encoding.UTF8.GetString(message.ToArray()).Contains("50"))? ? {? ? ? ? Console.WriteLine($"拒收 {DateTime.Now}");? ? ? ? ((EventingBasicConsumer)model).Model.BasicReject(ea.DeliveryTag, requeue: true);? ? ? ? return;? ? }? ? ((EventingBasicConsumer)model).Model.BasicAck(ea.DeliveryTag, multiple: false);};channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);

    當消費者端拒收消息后消息重入隊列,再次消費,反復進行超過5秒后,消息在隊列中達到了過期時間,則被挪入到死信隊列中。

    從Web管理中死信隊列中可查看該條過期的消息。

    參考資料

    到此這篇關于.Net Core和RabbitMQ限制循環消費的文章就介紹到這了,更多相關.net core rabbitmq循環消費內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

    標簽: ASP.NET
    主站蜘蛛池模板: 99国产精品99久久久久久 | 一级片免费视频 | 久久久久久久久国产成人免费 | 1000部羞羞视频在线看视频 | 2020亚洲视频 | 操操网站 | 国产超碰人人爽人人做人人爱 | 一区二区三区免费在线 | 国产精品成人3p一区二区三区 | 九九热在线观看 | 一区二区精品在线 | 午夜激情免费看 | 欧美视频在线免费看 | 日韩av成人 | 日韩激情综合网 | 欧美一区二区三区黄色 | 亚洲第一页中文字幕 | 国产一区免费视频 | 成人在线精品 | 中文字幕视频在线观看 | 五月天婷婷社区 | 黄色91| 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 久草视频在线播放 | 日韩成人在线视频 | 蜜臀久久99精品久久久无需会员 | 欧美日韩国产在线观看 | 一级全黄少妇性色生活片免费 | 成人性毛片 | 亚洲精品久久久一区二区三区 | 99久久免费精品国产男女性高好 | 国产一区二区三区四区在线观看 | 久久久久国产一区二区三区 | 久久亚洲国产精品 | 黄色大片网站 | 国产精品精品视频一区二区三区 | 精品二区视频 | 国产超碰人人模人人爽人人添 | 91电影在线观看 | 久久久精品影院 | av成人毛片| 国产欧美综合一区二区三区 | 激情开心成人网 | 91久久精品日日躁夜夜躁国产 | 99亚洲视频| 在线只有精品 | 欧美人体一区二区三区 | 二区在线观看 | 国产一区二区在线电影 | 最新国产在线 | 欧美一级一区 | 欧美三级不卡 | 精品久久久久久久久福利 | 久久精品一区视频 | 国产精品久久国产精品 | a级三四级黄大片 | 久久99精品久久久久久琪琪 | 视频一区 中文字幕 | 久久精品视频网站 | 欲色av | 日韩精品小视频 | 97国产一区二区精品久久呦 | 久久视频免费 | 九九九久久久 | 欧美一级做a爰片免费视频 亚洲精品一区在线观看 | 久久久精品一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 日本色站| 毛片在线视频 | 日本久久精品视频 | 羞羞视频免费网站 | www.久| 国产一区二区免费 | 91在线综合 | 亚洲一区二区精品视频 | 日韩中文字幕免费视频 | 伦理午夜电影免费观看 | 爱免费视频 | 国产精品久久久久毛片软件 | 韩国精品主播一区二区在线观看 | 7799精品视频天天看 | av超碰| 午夜视频在线免费观看 | 日韩在线欧美 | 免费毛片大全 | 久久久久国产精品视频 | 中文视频在线 | 国产中文视频 | 中国黄色毛片 大片 | 色噜噜视频 | 一区二区三区视频免费在线观看 | 国产在线资源 | 免费一区二区三区视频在线 | 日本三级在线观看中文字 | 久久综合一区二区 | 五月激情综合网 | 自拍亚洲 | 国产日产精品一区二区三区四区 | caoporn国产精品免费公开 | 韩国av一区二区 | 日韩在线字幕 | 久久大陆 | 欧美国产在线观看 | 一区在线视频观看 | 欧美淫视频 | 国产男女视频在线观看 | 国产成人在线免费观看视频 | 色伊人网 | 在线视频 亚洲 | 成人免费毛片高清视频 | 国产久 | 夜本色 | 国产欧美视频在线 | 成人av免费观看 | 日韩视频在线一区二区 | 在线观看91精品国产入口 | 亚洲欧美日韩国产综合精品二区 | 精品久久久中文字幕 | 久久99精品久久久久久久青青日本 | 国产午夜精品一区二区三区视频 | 国产精品入口久久 | 99精品免费视频 | 国产综合精品一区二区三区 | 午夜精品久久久久久99热软件 | 中文字幕91| 91久久久久久久久久久久久 | 欲色av| 国产一二三区在线观看 | 四季久久免费一区二区三区四区 | 九九热在线免费视频 | 午夜精品福利一区二区三区蜜桃 | 亚洲精品国产剧情久久9191 | 国产中文字幕一区 | 成人免费av| 天天天干夜夜夜操 | 天天操操 | 久久久久久91 | 久久久一区二区 | 青青草久草 | 免费一级黄色电影 | 精品视频一区二区三区 | 亚洲精品影院在线 | 日韩精品在线一区 | 91视频在线网址 | 国产不卡免费视频 | 欧美激情在线精品一区二区三区 | 中文字幕免费看 | 国产精品人人做人人爽 | 国产中文字幕亚洲 | 久久生活片 | 九色视频在线播放 | 国产成人精品一区二区在线 | 欧美一区二区三区精品 | 羞羞视频免费看 | 国产成人免费网站 | 日韩中文一区二区 | av网站在线免费观看 | 一区网站| 七龙珠z普通话国语版在线观看 | 亚洲精品免费看 | 精品久久久久久国产 | 日韩精品在线播放 | 久久久久九九九九九 | 日韩在线中文字幕 | 一区二区三区在线观看视频 | 一区二区视频 | 国产精品视频一区二区三区 | 欧美激情欧美激情在线五月 | 亚洲国产高清在线 | 国产精品久久久久久久久免费桃花 | 日韩欧美国产精品综合嫩v 国产高清av在线一区二区三区 | 一区二区不卡 | 精品国产一区二区三区免费 | 国产福利一区二区三区视频 | 成年人性视频 | 美女视频黄a | 亚洲成人网在线 | 亚洲三区视频 | 国产精品视频一二三区 | 欧美一区免费 | 久久99精品久久久久婷婷暖91 | 免费视频一区 | 一区二区精品 | 国产一区不卡 | aaa级片 | 亚洲视频一区在线 | 久久久av| 中文字幕一区二区三区乱码图片 | 精品久久久久久久久久久 | xnxx 美女19| av网站在线播放 | 成人午夜 | 日韩经典一区 | a∨色狠狠一区二区三区 | 欧美男人天堂 | 成人国产精品久久久 | 欧美国产日韩在线 | 久久久亚洲一区 | 免费观看一级特黄欧美大片 | 涩涩视频观看 | 欧美理论片在线观看 | 日韩国产欧美精品 | 国产亚洲精品美女久久久久久久久久 | 亚洲成人av片 | 国产片在线观看 | 国产视频一区二区 | 毛片免费观看网址 | 免费人成电影 | 国产一区二区av | 日韩午夜视频在线观看 | 久久噜噜噜精品国产亚洲综合 | 亚洲经典视频在线观看 | 亚洲精品一区二三区 | 欧美日韩不卡视频 | 成人免费在线播放 | 最新国产视频 | 久久精品国产精品 | 欧美日韩视频在线第一区 | 免费成人av | 亚洲一区中文字幕 | 欧美成人精品一区二区 | 久久99精品久久久水蜜桃 | 狠狠操中文字幕 | 欧美精品一区二区在线观看 | 国产高潮好爽受不了了夜色 | 九九亚洲 | 人妖一区 | 成人免费淫片aa视频免费 | 久久久久久国产视频 | 这里有精品在线视频 | 国产成人综合一区二区三区 | 狠狠av | 日本一区二区三区免费观看 | 六月丁香啪啪 | 精品久久久久久久久久久 | 国产xxx护士爽免费看 | 欧美午夜精品久久久久久蜜 | 真人一级毛片 | 九一视频在线观看 | 欧美日韩中字 | av网站网址| 欧美色欧美亚洲另类七区 | 天天干天天爱天天 | 欧美日韩一区二区三区在线观看 | 日韩精品一91爱爱 | 中文字幕日韩久久 | 色无欲天天天影视综合网 | 四虎成人免费电影 | 做a视频在线观看 | 91精品国产综合久久久久久丝袜 | 久久久www | 国产一区久久 | av免费在线播放 | 黄色大片网站在线观看 | 国产乱码精品一区二区三区av | 国内精品在线视频 | 亚洲第一区国产精品 | 久久国产视频精品 | 麻豆一区| 欧美一区二区三区在线 | 成人激情视频在线免费观看 | 国产亚洲女人久久久久毛片 | 精品1区2区| 久久黑人 | 亚洲美女在线视频 | 国产成人午夜高潮毛片 | 四虎精品在线 | 91高清在线观看 | 久久成人免费视频 | 羞羞色影院 | 欧美国产日韩精品 | 亚洲成人综合网站 | www日韩| 免费国产黄色大片 | 亚洲精品一二三区 | 玖玖精品| 亚洲国产视频一区 | av三级在线免费观看 | 国产精品毛片久久久久久久 | 日韩视频网 | 久久久婷 | 亚洲视频在线观看 | 亚洲福利社区 | 热re99久久精品国99热线看 | 国产精品福利在线观看 | 亚州av在线| 国产精品久久久久久久久久久久久久 | 精品国产乱码一区二区三区a | 亚洲高清av在线 | 日韩免费视频中文字幕 | 国产成人在线网站 | 日韩午夜 | 中文成人在线 | 久草av在线播放 | 亚洲a级在线观看 | 天天久久综合网 | 久久性色 | 最近韩国日本免费观看mv免费版 | 色婷网 | 黄色片免费观看网站 | 欧美一区二区三区精品 | 日本精品在线观看 | 国产伦精品一区二区三区四区视频 | 免费看国产一级特黄aaaa大片 | 久久国产精品视频 | 中文字幕免费看 | 亚洲成人精品网 | 国产香蕉视频在线播放 | 欧美另类一二三四 | 亚洲无吗电影 | 久久99er6热线精品首页蜜臀 | 欧美日韩久久久 | 精品国产髙清在线看国产毛片 | 激情毛片| 久久成人毛片 | 欧美精品一区二区三区中文字幕 | 黄的视频网站 | 欧美一区二区三区视频 | 亚洲激情视频在线播放 | 四虎影院在线 | 欧美成年人视频 | 久久久久久亚洲 | 久久久久综合狠狠综合日本高清 | caoporn国产精品免费公开 | 国产成人精品在线 | 欧美日韩干 | 一区二区三区国产精品 | 成人免费在线观看网址 | 日韩福利 | 在线观看免费av网 | 韩日av在线 | 精品在线一区 | 国产在线精品一区 | 日韩欧美一区二区三区免费观看 | 欧美日韩高清在线一区 | 一区二区三区免费网站 | 成人精品一区二区 | 国产一区二区三区在线 | 日韩视频一区二区三区 | 日韩一区二区黄色片 | 国产亚洲成av人片在线观看桃 | 国产一区二区三区视频 | 午夜久久视频 | 精品久久久久久久久久久 | 九九热这里只有精品在线观看 | h片观看 | 色综合久久88色综合天天 | 日本免费一区二区三区 | 亚洲欧美一 | 涩涩视频在线看 | 国产精品视频入口 | 黄色直接看 | 欧美自拍一区 | 最新国产在线 | 中文字幕免费在线 | 精品久久影院 | 久久精品欧美电影 | 中文在线视频 | 伊人小视频 | 91久久精品日日躁夜夜躁国产 | 美女视频一区二区三区 | 亚洲精品美女久久 | 日韩欧美视频 | 久久综合一区二区三区 | 久久精品国产一区二区三区不卡 | 成人高清视频在线观看 | 午夜网 | 中文字幕观看 | 欧美日韩在线免费观看 | vagaa欧洲色爽免影院 | 亚洲色图p| 日本色网址 | 国产高清视频一区二区 | 日韩av电影免费 | 国产一区二区精品 | 色婷婷久久久久swag精品 | 成人亚洲在线观看 | 香蕉在线影院 | 亚洲综合精品视频 | 国产一区二区在线看 | 操视频网站| 91精品国产综合久久精品 | 日韩中文字| 91av官网| 在线观看日韩精品 | 日韩免费一区 | 国产高清视频一区 | 免费在线日韩 | 爱爱视频在线观看 | 国产黄视频在线 | 国产激情偷乱视频一区二区三区 | 久久国产久 | 91精品国产一区二区 | 久久久涩 | 精品日韩一区二区 | 无套内谢孕妇毛片免费看红桃影视 | 亚洲精久久 | 一区二区三区日韩 | 国产精品视频网 | 久久精品欧美一区二区三区不卡 | 国产丝袜在线 | 日韩另类| 99视频免费播放 | 成人观看免费视频 | 日韩国产欧美 | 自拍视频在线观看免费 | 久久99国产精品 | 国产高清在线精品 | 看羞羞视频免费 | 欧美天堂在线观看 | 日韩欧美在线一区 | 成视频年人免费看黄网站 | 久久久精彩视频 | 国产成人精品久久 | 999国产在线 | 日本黄色毛片 | 亚洲国产精品第一区二区 | 亚洲一区二区三区免费看 | 天天综合网7799精品 | 国产视频久久久久久久 | 亚洲二区在线 | 色黄网站 | 欧美二区三区 | 午夜在线小视频 | 亚洲情欲网 | 亚洲一区国产精品 | 日韩av免费在线观看 | 日韩精品一区二区三区在线观看 | 狠狠骚 | 亚洲精品午夜视频 | 欧美区 日韩区 | 日本在线观看网站 | 日本在线一区二区 | 99精彩视频 | 色婷婷亚洲 | 亚洲精品乱码久久久久膏 | 国产精品对白一区二区三区 | 日本免费在线 | 91se在线 | 91精品国产777在线观看 | 国产一级免费在线观看 | 99久久99久久精品 | 国产农村妇女精品一二区 | 免费成人av在线 | 91久久91久久精品免观看 | 日韩中文字幕在线观看 | 欧美污污| 中文字幕一区二区三区日韩精品 | 99re国产 | 欧美一级网 | 久久久久久av | 午夜午夜精品一区二区三区文 | 日本在线视频一区 | 日韩一二三区 | a国产精品 | 成人在线免费视频 | 国产在线免费 | 国产精品久久久久久久久久久新郎 | 五月激情综合 | 国产最好的av国产大片 | 亚洲日本精品视频 | 国产91久久久 | 一级看片 | www.国产在线 | 久草院线 | 人人射av | 蜜桃视频精品 | 99久久婷婷国产精品综合 | 国产77777 | 美女久久久久久久久久久 | 欧美视频一级片 | 国产美女精品一区二区三区 | 91色爱| 91精彩视频在线观看 | 精品久久97| 中文字幕日韩视频 | 在线一区二区三区 | 亚洲a在线观看 | 亚洲精品乱码8久久久久久日本 | 大香伊在人线免97 | 欧美黄色片免费观看 | 亚洲一区二区三区免费观看 | 亚洲一区 日韩精品 中文字幕 | 精品国产一区二区三区久久影院 | 高清成人 | 亚洲成av人片在线观看无码 | 免费视频爱爱太爽了 | 国产9色在线 | 日韩 | 国产亚洲精品精品国产亚洲综合 | 欧美精品在线免费观看 | 中文字幕影院 | av网站在线免费看 | 一区三区在线观看 | 女同久久| 精品少妇一区二区 | 日韩在线一区二区三区 | 亚洲精品1 | 岛国一区 | 欧美福利一区 | 真人一级毛片 | 中国特级毛片 | 国产精品美女久久久久aⅴ国产馆 | 日韩三区视频 | 亚洲视频观看 | 亚洲精品一二区 | 日韩在线中出 | www国产在线观看 | 亚洲a在线观看 | 国产一区二区精品 | 国产精品久久久久久久久福交 | 成人a级片在线观看 | 日本aaaa| 男女做爰高清无遮挡免费视频 | 日日做夜夜爱 | 中文字幕av一区二区三区 | 草草视频网站 | av在线一区二区三区 | 午夜成人在线视频 | 美女视频一区 | 久久成人免费视频 | 国产成人精品一区二区三区四区 | 欧美激情一区 | 亚洲一区二区三区高清 | 国产自在现线2019 | 龙珠z国语291集普通话 | 国内自拍视频在线观看 | 国产日韩av在线 | 国产一级免费在线 | aa级毛片毛片免费观看久 | 日韩中文字幕一区 | 一级毛片中国 | 日韩视频精品 | 亚洲视频在线播放 | 久9久9| 色黄视频在线观看 | 99精品欧美一区二区三区 | 国产99精品 | 亚洲在线免费观看 | 91高清视频 | 性一交一乱一透一a级 | 欧美日本韩国一区二区 | 一级网站在线观看 | 中文在线一区 | 国产精品资源在线 | 日日综合 | 亚洲欧美高清 | 91麻豆久久久 | 国产精品久久久久久 | 91九色视频国产 | 伊人色综合久久天天五月婷 | 99国产精品99久久久久久 | 国产成人精品久久二区二区 | 亚洲夜幕久久日韩精品一区 | 天天操天天碰 | 国产视频99 | 精品1区2区| 国产乡下妇女做爰视频 | 国产精品夜夜 | 日韩欧美一区二区视频 | 亚洲国产二区 | 欧美激情一区 | 夸克满天星在线观看 | 免费av电影网站 | 欧美日韩一区在线 | 久久av一区二区三区 | 日韩成人在线看 | 91最新| 国产精品视频一区二区免费不卡 | 欧美亚洲综合久久 | 日韩精品一区二区在线观看 | 日韩精品久久久久久 | 国产亚洲成av人片在线观看桃 | 欧美精品1区 | 狠狠干av | www.日韩视频 | 久久精品福利 | 精品久久久久久久久久久久久久 | 中文字幕日韩在线 | 亚洲 成人 av | 久久国产一区二区 | 国产激情一区二区三区成人免费 | 91av导航| 岛国在线免费 | 欧美在线一区二区三区 | 欧美精品在线一区 | 日日操夜夜操天天操 | 一区二区三区四区视频 | 国产精品久久久久久久 | 亚洲精品第一 | 蜜桃视频麻豆女神沈芯语免费观看 | 欧美一级毛片免费观看 | 天天干天天搞天天射 | 人人做人人爽 | 久久99国产精品久久99大师 | 国产传媒毛片精品视频第一次 | 国产亚洲精品久久久优势 | 亚洲三级网站 | 青青久视频 | 91精品国产综合久久久久久蜜臀 | 成人黄色一区 | 中文字幕在线免费 | 怡红院免费在线视频 | 国产视频福利在线 | 性大毛片视频 | 国产91精选 | 国产一级视频免费观看 | 综合久久国产九一剧情麻豆 | 五月婷婷婷婷 | 国产在线精品一区二区三区 | 久久精品国产久精国产 | 午夜影院在线免费观看 | 日本三级不卡 | 精品一区二区三区四区五区 | 日韩一区二区在线播放 | 精品亚洲永久免费精品 |