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

RabbitMQ 高可用之如何確保消息成功消費

開發 架構
為了保證消息能夠可靠的到達消息消費者,RabbitMQ 中提供了消息消費確認機制。當消費者去消費消息的時候,可以通過指定 autoAck 參數來表示消息消費的確認方式。
  • 1. 兩種消費思路
  • 2. 確保消費成功兩種思路
  • 3. 消息拒絕
  • 4. 消息確認
    • 4.1 自動確認
    • 4.2 手動確認
  • 5. 冪等性問題
  • 6. 小結

前面一篇文章松哥和大家聊了 MQ 高可用之如何確保消息成功發送,各種配置齊上陣,最終確保了消息的成功發送,甚至在一些極端情況下還可能發生同一條消息重復發送的情況,不管怎么樣,消息總算發送出去了,如果小伙伴們還沒看過上篇文章,建議先看看,再來學習本文:

四種策略確保 RabbitMQ 消息發送可靠性!你用哪種?

今天我們就來聊一聊消息消費的問題,看看如何確保消息消費成功,并且確保冪等性。

1. 兩種消費思路

RabbitMQ 的消息消費,整體上來說有兩種不同的思路:

  • 推(push):MQ 主動將消息推送給消費者,這種方式需要消費者設置一個緩沖區去緩存消息,對于消費者而言,內存中總是有一堆需要處理的消息,所以這種方式的效率比較高,這也是目前大多數應用采用的消費方式。
  • 拉(pull):消費者主動從 MQ 拉取消息,這種方式效率并不是很高,不過有的時候如果服務端需要批量拉取消息,倒是可以采用這種方式。

兩種方式我都舉個例子看下。

先來看推(push):

這種方式大家比較常見,就是通過 @RabbitListener 注解去標記消費者,如下:

  1. @Component 
  2. public class ConsumerDemo { 
  3.     @RabbitListener(queues = RabbitConfig.JAVABOY_QUEUE_NAME) 
  4.     public void handle(String msg) { 
  5.         System.out.println("msg = " + msg); 
  6.     } 

當監聽的隊列中有消息時,就會觸發該方法。

再來看拉(pull):

  1. @Test 
  2. public void test01() throws UnsupportedEncodingException { 
  3.     Object o = rabbitTemplate.receiveAndConvert(RabbitConfig.JAVABOY_QUEUE_NAME); 
  4.     System.out.println("o = " + new String(((byte[]) o),"UTF-8")); 

調用 receiveAndConvert 方法,方法參數為隊列名稱,方法執行完成后,會從 MQ 上拉取一條消息下來,如果該方法返回值為 null,表示該隊列上沒有消息了。receiveAndConvert 方法有一個重載方法,可以在重載方法中傳入一個等待超時時間,例如 3 秒。此時,假設隊列中沒有消息了,則 receiveAndConvert 方法會阻塞 3 秒,3 秒內如果隊列中有了新消息就返回,3 秒后如果隊列中還是沒有新消息,就返回 null,這個等待超時時間要是不設置的話,默認為 0。

這是消息兩種不同的消費模式。

如果需要從消息隊列中持續獲得消息,就可以使用推模式;如果只是單純的消費一條消息,則使用拉模式即可。切忌將拉模式放到一個死循環中,變相的訂閱消息,這會嚴重影響 RabbitMQ 的性能。

2. 確保消費成功兩種思路

在上篇文章中,我們想盡辦法確保消息能夠發送成功,對于消息消費成功,其實官方提供了相關的機制,我們一起來看下。

為了保證消息能夠可靠的到達消息消費者,RabbitMQ 中提供了消息消費確認機制。當消費者去消費消息的時候,可以通過指定 autoAck 參數來表示消息消費的確認方式。

當 autoAck 為 false 的時候,此時即使消費者已經收到消息了,RabbitMQ 也不會立馬將消息移除,而是等待消費者顯式的回復確認信號后,才會將消息打上刪除標記,然后再刪除。

當 autoAck 為 true 的時候,此時消息消費者就會自動把發送出去的消息設置為確認,然后將消息移除(從內存或者磁盤中),即使這些消息并沒有到達消費者。

我們來看一張圖:

如上圖所示,在 RabbitMQ 的 web 管理頁面:

  • Ready 表示待消費的消息數量。
  • Unacked 表示已經發送給消費者但是還沒收到消費者 ack 的消息數量。

這是我們可以從 UI 層面觀察消息的消費情況確認情況。

當我們將 autoAck 設置為 false 的時候,對于 RabbitMQ 而言,消費分成了兩個部分:

  • 待消費的消息
  • 已經投遞給消費者,但是還沒有被消費者確認的消息

換句話說,當設置 autoAck 為 false 的時候,消費者就變得非常從容了,它將有足夠的時間去處理這條消息,當消息正常處理完成后,再手動 ack,此時 RabbitMQ 才會認為這條消息消費成功了。如果 RabbitMQ 一直沒有收到客戶端的反饋,并且此時客戶端也已經斷開連接了,那么 RabbitMQ 就會將剛剛的消息重新放回隊列中,等待下一次被消費。

綜上所述,確保消息被成功消費,無非就是手動 Ack 或者自動 Ack,無他。當然,無論這兩種中的哪一種,最終都有可能導致消息被重復消費,所以一般來說我們還需要在處理消息時,解決冪等性問題。

3. 消息拒絕

當客戶端收到消息時,可以選擇消費這條消息,也可以選擇拒絕這條消息。我們來看下拒絕的方式:

  1. @Component 
  2. public class ConsumerDemo { 
  3.     @RabbitListener(queues = RabbitConfig.JAVABOY_QUEUE_NAME) 
  4.     public void handle(Channel channel, Message message) { 
  5.         //獲取消息編號 
  6.         long deliveryTag = message.getMessageProperties().getDeliveryTag(); 
  7.         try { 
  8.             //拒絕消息 
  9.             channel.basicReject(deliveryTag, true); 
  10.         } catch (IOException e) { 
  11.             e.printStackTrace(); 
  12.         } 
  13.     } 

消費者收到消息之后,可以選擇拒絕消費該條消息,拒絕的步驟分兩步:

  1. 獲取消息編號 deliveryTag。
  2. 調用 basicReject 方法拒絕消息。

調用 basicReject 方法時,第二個參數是 requeue,即是否重新入隊。如果第二個參數為 true,則這條被拒絕的消息會重新進入到消息隊列中,等待下一次被消費;如果第二個參數為 false,則這條被拒絕的消息就會被丟掉,不會有新的消費者去消費它了。

需要注意的是,basicReject 方法一次只能拒絕一條消息。

4. 消息確認

消息確認分為自動確認和手動確認,我們分別來看。

4.1 自動確認

先來看看自動確認,在 Spring Boot 中,默認情況下,消息消費就是自動確認的。

我們來看如下一個消息消費方法:

  1. @Component 
  2. public class ConsumerDemo { 
  3.     @RabbitListener(queues = RabbitConfig.JAVABOY_QUEUE_NAME) 
  4.     public void handle2(String msg) { 
  5.         System.out.println("msg = " + msg); 
  6.         int i = 1 / 0; 
  7.     } 

通過 @Componet 注解將當前類注入到 Spring 容器中,然后通過 @RabbitListener 注解來標記一個消息消費方法,默認情況下,消息消費方法自帶事務,即如果該方法在執行過程中拋出異常,那么被消費的消息會重新回到隊列中等待下一次被消費,如果該方法正常執行完沒有拋出異常,則這條消息就算是被消費了。

4.2 手動確認

手動確認我又把它分為兩種:推模式手動確認與拉模式手動確認。

4.2.1 推模式手動確認

要開啟手動確認,需要我們首先關閉自動確認,關閉方式如下:

  1. spring.rabbitmq.listener.simple.acknowledge-mode=manual 

這個配置表示將消息的確認模式改為手動確認。

接下來我們來看下消費者中的代碼:

  1. @RabbitListener(queues = RabbitConfig.JAVABOY_QUEUE_NAME) 
  2. public void handle3(Message message,Channel channel) { 
  3.     long deliveryTag = message.getMessageProperties().getDeliveryTag(); 
  4.     try { 
  5.         //消息消費的代碼寫到這里 
  6.         String s = new String(message.getBody()); 
  7.         System.out.println("s = " + s); 
  8.         //消費完成后,手動 ack 
  9.         channel.basicAck(deliveryTag, false); 
  10.     } catch (Exception e) { 
  11.         //手動 nack 
  12.         try { 
  13.             channel.basicNack(deliveryTag, falsetrue); 
  14.         } catch (IOException ex) { 
  15.             ex.printStackTrace(); 
  16.         } 
  17.     } 

將消費者要做的事情放到一個 try..catch 代碼塊中。

如果消息正常消費成功,則執行 basicAck 完成確認。

如果消息消費失敗,則執行 basicNack 方法,告訴 RabbitMQ 消息消費失敗。

這里涉及到兩個方法:

  • basicAck:這個是手動確認消息已經成功消費,該方法有兩個參數:第一個參數表示消息的 id;第二個參數 multiple 如果為 false,表示僅確認當前消息消費成功,如果為 true,則表示當前消息之前所有未被當前消費者確認的消息都消費成功。
  • basicNack:這個是告訴 RabbitMQ 當前消息未被成功消費,該方法有三個參數:第一個參數表示消息的 id;第二個參數 multiple 如果為 false,表示僅拒絕當前消息的消費,如果為 true,則表示拒絕當前消息之前所有未被當前消費者確認的消息;第三個參數 requeue 含義和前面所說的一樣,被拒絕的消息是否重新入隊。

當 basicNack 中最后一個參數設置為 false 的時候,還涉及到一個死信隊列的問題,這個松哥以后再專門寫文章和大家細聊。

4.2.2 拉模式手動確認

拉模式手動 ack 比較麻煩一些,在 Spring 中封裝的 RabbitTemplate 中并未找到對應的方法,所以我們得用原生的辦法,如下:

  1. public void receive2() { 
  2.     Channel channel = rabbitTemplate.getConnectionFactory().createConnection().createChannel(true); 
  3.     long deliveryTag = 0L; 
  4.     try { 
  5.         GetResponse getResponse = channel.basicGet(RabbitConfig.JAVABOY_QUEUE_NAME, false); 
  6.         deliveryTag = getResponse.getEnvelope().getDeliveryTag(); 
  7.         System.out.println("o = " + new String((getResponse.getBody()), "UTF-8")); 
  8.         channel.basicAck(deliveryTag, false); 
  9.     } catch (IOException e) { 
  10.         try { 
  11.             channel.basicNack(deliveryTag, falsetrue); 
  12.         } catch (IOException ex) { 
  13.             ex.printStackTrace(); 
  14.         } 
  15.     } 

這里涉及到的 basicAck 和 basicNack 方法跟前面的一樣,我就不再贅述。

5. 冪等性問題

最后我們再來說說消息的冪等性問題。

大家設想下面一個場景:

消費者在消費完一條消息后,向 RabbitMQ 發送一個 ack 確認,此時由于網絡斷開或者其他原因導致 RabbitMQ 并沒有收到這個 ack,那么此時 RabbitMQ 并不會將該條消息刪除,當重新建立起連接后,消費者還是會再次收到該條消息,這就造成了消息的重復消費。同時,由于類似的原因,消息在發送的時候,同一條消息也可能會發送兩次(參見四種策略確保 RabbitMQ 消息發送可靠性!你用哪種?)。種種原因導致我們在消費消息時,一定要處理好冪等性問題。

冪等性問題的處理倒也不難,基本上都是從業務上來處理,我來大概說說思路。

采用 Redis,在消費者消費消息之前,現將消息的 id 放到 Redis 中,存儲方式如下:

  • id-0(正在執行業務)
  • id-1(執行業務成功)

如果 ack 失敗,在 RabbitMQ 將消息交給其他的消費者時,先執行 setnx,如果 key 已經存在(說明之前有人消費過該消息),獲取他的值,如果是 0,當前消費者就什么都不做,如果是 1,直接 ack。

極端情況:第一個消費者在執行業務時,出現了死鎖,在 setnx 的基礎上,再給 key 設置一個生存時間。生產者,發送消息時,指定 messageId。

當然這只是一個簡單思路供大家參考。

松哥在 vhr 項目中也處理了消息冪等性問題,感興趣的小伙伴可以查看 vhr 源碼(https://github.com/lenve/vhr),代碼在 mailserver 中。

6. 小結

好啦,今天就和小伙伴們聊了下 RabbitMQ 中和消息消費相關的幾個話題,感興趣的小伙伴可以實踐下哦~

本文轉載自微信公眾號「江南一點雨」,可以通過以下二維碼關注。轉載本文請聯系江南一點雨公眾號。

 

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2013-08-28 10:30:39

vSphere

2024-12-18 07:43:49

2024-05-23 12:11:39

2022-05-16 13:46:38

Redis高可用Sentinel

2024-08-12 12:17:03

2018-06-21 08:23:35

云存儲高可用應用

2021-09-30 07:26:15

MQ消息丟失

2020-03-18 09:00:06

SQL Server云計算數據庫

2022-09-21 16:09:28

消息中間件

2025-09-22 08:26:37

2025-09-18 08:53:20

2019-03-25 09:09:57

MySQLRedisHBase

2010-12-07 15:30:15

Exchange Se

2021-03-01 07:31:53

消息支付高可用

2019-03-28 09:07:05

MySQLRedisHBase

2023-03-06 08:16:04

SpringRabbitMQ

2020-10-28 11:20:18

RabbitMQHAProxy運維

2025-07-31 04:00:00

2024-05-09 08:04:23

RabbitMQ消息可靠性

2020-10-14 08:36:10

RabbitMQ消息
點贊
收藏

51CTO技術棧公眾號

www.国产com| 特黄特黄一级片| 高h视频在线| 精品一区二区免费看| 久久色免费在线视频| 久久av一区二区三| 伊人成综合网站| 国产精品成人一区二区三区夜夜夜| 91精品综合视频| 日韩毛片在线播放| av一区二区在线播放| 91麻豆精品国产91久久久久久久久 | 超碰个人在线| 97久久精品人人澡人人爽| 国产精品成人国产乱一区 | 中文字幕久久久久久久| 中文字幕乱码在线播放| 亚洲女同一区二区| 欧美亚州在线观看| 99精品在线视频观看| 每日更新成人在线视频| 欧美日韩国产91| 国产1区2区在线观看| 136导航精品福利| 欧美三级电影在线观看| 国产美女主播在线播放| 免费av在线播放| 久久蜜臀中文字幕| 99国产视频在线| 亚洲性在线观看| 亚洲欧美卡通另类91av| 欧美肥婆姓交大片| 国产又粗又长又黄的视频| 欧美一性一交| 欧美大片一区二区| 中文字幕丰满乱码| 天堂久久午夜av| 色婷婷精品久久二区二区蜜臂av| 99久久久精品视频| 久草资源在线| 中文字幕在线播放不卡一区| 日韩国产高清一区| 日韩porn| 2欧美一区二区三区在线观看视频| 成人有码在线播放| 亚洲一级片免费看| 青椒成人免费视频| 国产精品高清免费在线观看| 在线观看亚洲欧美| 亚洲高清在线| 久久久伊人日本| 国产精品成人久久| 国精品一区二区三区| 久久夜色撩人精品| 日本高清黄色片| jizzjizz欧美69巨大| 亚洲欧美国产制服动漫| 人人妻人人澡人人爽人人精品| 都市激情亚洲欧美| 亚洲国产99精品国自产| 任你躁av一区二区三区| 91成人福利| 亚洲成人黄色网址| 捆绑凌虐一区二区三区| 婷婷亚洲成人| 亚洲人高潮女人毛茸茸| 中文字幕网站在线观看| 国内精品久久久久久99蜜桃| 在线亚洲国产精品网| 99精品全国免费观看| 久久视频精品| 欧美成人黄色小视频| 欧美精品一级片| 亚洲激情网址| 国产91露脸中文字幕在线| 国产一区二区视频免费| 日韩精品一级中文字幕精品视频免费观看 | 国产精品成人av性教育| 亚洲国产无线乱码在线观看| 日韩国产精品91| 国产激情久久久| 一区二区三区亚洲视频| 国产精品一二三区| 久久大片网站| aaa日本高清在线播放免费观看| 国产精品久久免费看| 日本精品免费视频| av女在线播放| 欧美三级三级三级| 影音先锋资源av| 国产91久久精品一区二区| 在线看片第一页欧美| 国产又黄又爽又无遮挡| 99国产精品| 国产精品亚洲自拍| 性欧美8khd高清极品| 91蜜桃传媒精品久久久一区二区| 午夜午夜精品一区二区三区文| 国产一二三区在线观看| 性感美女极品91精品| 免费看黄色一级大片| 亚洲综合资源| 亚洲福利影片在线| 欧美福利在线视频| 亚洲精品乱码久久久久久蜜桃麻豆| 日本不卡视频在线播放| av在线免费在线观看| 久久日韩精品一区二区五区| 裸体裸乳免费看| 欲香欲色天天天综合和网| 91超碰这里只有精品国产| 大乳护士喂奶hd| 小小影院久久| 国产91在线播放| 性网爆门事件集合av| 国产女主播视频一区二区| 精品无码国产一区二区三区av| 日韩免费va| 日韩欧美电影一二三| 69视频在线观看免费| 亚洲日本激情| 国产欧美一区二区三区久久人妖| 日韩在线视频观看免费| 最新欧美精品一区二区三区| 男女曰b免费视频| 国产福利资源一区| 成年人精品视频| 亚洲熟妇无码久久精品| 91网页版在线| www.国产在线视频| 精品一区二区三区中文字幕| 在线成人中文字幕| av一级在线观看| av中文一区二区三区| 国产成人一区二区三区别| 国产精品一区二区美女视频免费看| 亚洲欧美色婷婷| 久久久久久久极品| 不卡电影免费在线播放一区| 在线观看17c| 国产999精品在线观看| 在线视频日本亚洲性| 免费观看日批视频| 久久亚洲影视婷婷| 欧美日韩在线视频一区二区三区| 国产精品nxnn| 国外视频精品毛片| 人妻妺妺窝人体色www聚色窝| 亚洲精品欧美二区三区中文字幕| 好男人www社区| 精品国产乱码久久久久久果冻传媒 | 中文字幕美女视频| 日本免费在线视频不卡一不卡二 | 色婷婷亚洲mv天堂mv在影片| 国产99视频精品免视看7| 久久久久久久久亚洲精品| 欧美视频一二三| 我和岳m愉情xxxⅹ视频| 另类激情亚洲| 神马影院午夜我不卡影院| 忘忧草在线www成人影院| 伊人久久久久久久久久久| 最近中文字幕免费观看| 国产精品天干天干在观线| 亚洲欧美视频二区| 久久久久国产精品| 99porn视频在线| av3级在线| 精品视频在线播放色网色视频| 亚洲熟女综合色一区二区三区| 久久久一区二区| 欧美黄色性生活| 91精品国产麻豆国产在线观看| 成人在线视频福利| 中文字幕资源网在线观看| 精品国一区二区三区| 在线观看精品国产| 久久精品亚洲一区二区三区浴池 | 二区视频在线观看| 国产日产欧美一区| 日韩av片专区| 在线精品一区| 五月天色一区| 亚洲成av人片在线观看www| 97在线精品视频| 狠狠狠综合7777久夜色撩人| 欧美绝品在线观看成人午夜影视| 欧美日韩综合一区二区| 91丨porny丨蝌蚪视频| 天天插天天操天天射| 一区二区三区在线| 麻豆成人在线播放| 超碰国产精品一区二页| 国内偷自视频区视频综合| 岛国视频免费在线观看| 日韩欧美一二三四区| 国产伦精品一区二区三区视频我| 亚洲三级视频在线观看| 日本黄色免费观看| 狠狠色丁香婷婷综合久久片| 成人综合视频在线| 一级毛片免费高清中文字幕久久网| 国产精品一区二区三区四区五区| 久久99久久99精品免观看软件| 久久久精品一区二区| 深夜福利免费在线观看| 91精品国产91久久久久久最新毛片| 97免费在线观看视频| 国产精品国产馆在线真实露脸| 国产精品一区二区无码对白| 老司机午夜精品| 日本成年人网址| 欧美女人交a| 亚洲午夜精品福利| 日韩av字幕| 91久久伊人青青碰碰婷婷| 日韩一区二区三区免费| 午夜精品福利电影| 国内外激情在线| 一区国产精品视频| 亚洲欧洲成人在线| 欧美成人一级视频| 国产精品视频在线观看免费| 色综合视频一区二区三区高清| 欧美精品一级片| 亚洲同性同志一二三专区| 日韩一区二区a片免费观看| 成人国产视频在线观看| 深爱五月综合网| 蜜臀精品一区二区三区在线观看 | 激情久久一区二区| 国产成人精品久久| 女人让男人操自己视频在线观看 | 亚洲精品视频久久| 欧美性受xxxx狂喷水| 日韩欧美一级片| 国产夫妻自拍av| 91麻豆精品91久久久久久清纯 | 欧美三级网站| 久久久久久久久综合| 中文在线观看免费| 久久久精品999| 国产精品一卡二卡三卡| 爱福利视频一区| 黄网站在线免费看| 久久亚洲国产成人| 宅男网站在线免费观看| 欧美久久久精品| 色呦呦网站在线观看| 欧美国产日韩在线| 91九色国产在线播放| 91av在线免费观看| 中文不卡1区2区3区| 欧美孕妇与黑人孕交| 三妻四妾完整版在线观看电视剧 | 欧美日韩性生活视频| 欧美成人aaaaⅴ片在线看| 亚洲精品视频一区| 亚洲av鲁丝一区二区三区 | 国产91av视频| 亚洲一区日韩精品中文字幕| 精品无码av在线| 亚洲黄色免费网站| 日韩在线观看视频一区二区| 亚洲一区二区精品久久av| 黄页网站免费观看| 亚洲一区二区在线播放相泽 | 亚洲人午夜精品天堂一二香蕉| 秋霞网一区二区三区| 国产精品乱码一区二区三区软件| 免费看日本黄色片| 最新国产の精品合集bt伙计| www.av免费| 亚洲欧美日韩国产另类专区| 日本一二三区不卡| 欧美日韩午夜视频在线观看| www.国产com| 8v天堂国产在线一区二区| 国产精品久久久久久久免费看| 欧美丰满美乳xxx高潮www| 亚洲产国偷v产偷v自拍涩爱| 亚洲国产天堂久久综合| 日韩福利一区二区| 精品国产一区二区三区在线观看| 成人在线观看免费网站| 久久久天堂国产精品女人| 欧美日韩精品一区二区三区视频| 国产精品入口免费视| 成人在线啊v| 久久综合精品一区| 色琪琪久久se色| 国产爆乳无码一区二区麻豆| 日韩午夜精品| 最新国产黄色网址| 福利电影一区二区三区| 久久久久久久久免费看无码| 国产精品国产三级国产aⅴ入口| 超碰在线国产97| 精品久久久久久中文字幕| 中文字幕在线视频免费| 日韩区在线观看| 亚洲色图21p| 裸体女人亚洲精品一区| 鲁鲁在线中文| 国产mv免费观看入口亚洲| 人人爱人人干婷婷丁香亚洲| 精品亚洲第一| 亚洲欧美tv| 激情六月天婷婷| 久久精品官网| 日本一本在线视频| 26uuu亚洲综合色欧美 | 亚洲国产成人av网| 毛片在线免费播放| 精品欧美黑人一区二区三区| 日本在线免费播放| 91精品国产高清自在线| 欧美一级做一级爱a做片性| 久久精品国产美女| 中文字幕免费一区二区| 色综合av综合无码综合网站| 国产成人综合网站| 美女av免费看| 一区二区三区产品免费精品久久75| 亚洲 日本 欧美 中文幕| 日韩欧美国产成人一区二区| 裸体xxxx视频在线| 69影院欧美专区视频| 精品国产一级| 一区二区三区四区欧美日韩| 国产美女一区| 国产亚洲色婷婷久久| 亚洲欧美一区二区在线观看| 成人免费毛片男人用品| 精品国产青草久久久久福利| a级影片在线观看| 国产精品美女主播| 国产精品自在| 色播亚洲婷婷| 亚洲在线一区| 黑森林av导航| 亚洲第一狼人社区| 国产成人精品无码高潮| 中文字幕av一区二区| 欧美va在线| 免费久久久一本精品久久区| 亚洲综合精品| 久久人妻一区二区| 亚洲成人午夜影院| 国产18精品乱码免费看| 欧美精品在线免费播放| 精品欧美日韩精品| 一区二区视频在线播放| 日本亚洲三级在线| 国产欧美小视频| 91国偷自产一区二区开放时间| 隣の若妻さん波多野结衣| 久久久亚洲精选| 黄色欧美在线| 国产传媒久久久| 成人黄色综合网站| 激情综合网五月婷婷| 日韩av在线电影网| 欧美gv在线| 欧美福利一区二区三区| 日本午夜一区二区| 国产成人免费观看网站| 欧美日韩大陆一区二区| 午夜毛片在线| 91视频-88av| 今天的高清视频免费播放成人| 亚洲成人福利视频| 欧美日韩免费在线观看| 欧美日本韩国一区二区| 日韩av片永久免费网站| 91一区在线| 黄色一级片免费播放| 亚洲精品免费在线观看| 国内精品久久久久久久久久久| 欧美高清视频在线| 日韩精品导航| 国产真实乱子伦| 国产精品久久久久三级| 国产日韩一级片| 久久免费视频在线观看| 黑人操亚洲人| 伊人精品视频在线观看| 亚洲电影激情视频网站| 欧美孕妇孕交xxⅹ孕妇交| 国产精品吊钟奶在线| 66久久国产| 日韩少妇一区二区| 色婷婷国产精品综合在线观看| 午夜激情视频在线观看| 好看的日韩精品| 免费在线一区观看| 欧美亚韩一区二区三区| 一区二区福利视频| 久久久久伊人| 欧美国产激情视频|