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

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

開發 架構
微服務可以設計成消息驅動的微服務,響應式系統也可以基于消息中間件來做,從這個角度來說,在互聯網應用開發中,消息中間件真的是太重要了。

[[416528]]

微服務可以設計成消息驅動的微服務,響應式系統也可以基于消息中間件來做,從這個角度來說,在互聯網應用開發中,消息中間件真的是太重要了。

今天,以 RabbitMQ 為例,松哥來和大家聊一聊消息中間消息發送可靠性的問題。

注意,以下內容我主要和大家討論如何確保消息生產者將消息發送成功,并不涉及消息消費的問題。

1. RabbitMQ 消息發送機制

大家知道,RabbitMQ 中的消息發送引入了 Exchange(交換機)的概念,消息的發送首先到達交換機上,然后再根據既定的路由規則,由交換機將消息路由到不同的 Queue(隊列)中,再由不同的消費者去消費。

大致的流程就是這樣,所以要確保消息發送的可靠性,主要從兩方面去確認:

  • 消息成功到達 Exchange
  • 消息成功到達 Queue

如果能確認這兩步,那么我們就可以認為消息發送成功了。

如果這兩步中任一步驟出現問題,那么消息就沒有成功送達,此時我們可能要通過重試等方式去重新發送消息,多次重試之后,如果消息還是不能到達,則可能就需要人工介入了。

經過上面的分析,我們可以確認,要確保消息成功發送,我們只需要做好三件事就可以了:

  • 確認消息到達 Exchange。
  • 確認消息到達 Queue。
  • 開啟定時任務,定時投遞那些發送失敗的消息。

2. RabbitMQ 的努力

上面提出的三個步驟,第三步需要我們自己實現,前兩步 RabbitMQ 則有現成的解決方案。

如何確保消息成功到達 RabbitMQ?RabbitMQ 給出了兩種方案:

  • 開啟事務機制
  • 發送方確認機制

這是兩種不同的方案,不可以同時開啟,只能選擇其中之一,如果兩者同時開啟,則會報如下錯誤:

我們分別來看。以下所有案例都在 Spring Boot 中展開,文末可以下載相關源碼。

2.1 開啟事務機制

Spring Boot 中開啟 RabbitMQ 事務機制的方式如下:

首先需要先提供一個事務管理器,如下:

  1. @Bean 
  2. RabbitTransactionManager transactionManager(ConnectionFactory connectionFactory) { 
  3.     return new RabbitTransactionManager(connectionFactory); 

接下來,在消息生產者上面做兩件事:添加事務注解并設置通信信道為事務模式:

  1. @Service 
  2. public class MsgService { 
  3.     @Autowired 
  4.     RabbitTemplate rabbitTemplate; 
  5.  
  6.     @Transactional 
  7.     public void send() { 
  8.         rabbitTemplate.setChannelTransacted(true); 
  9.         rabbitTemplate.convertAndSend(RabbitConfig.JAVABOY_EXCHANGE_NAME,RabbitConfig.JAVABOY_QUEUE_NAME,"hello rabbitmq!".getBytes()); 
  10.         int i = 1 / 0; 
  11.     } 

這里注意兩點:

  • 發送消息的方法上添加 @Transactional 注解標記事務。
  • 調用 setChannelTransacted 方法設置為 true 開啟事務模式。

這就 OK 了。

在上面的案例中,我們在結尾來了個 1/0 ,這在運行時必然拋出異常,我們可以嘗試運行該方法,發現消息并未發送成功。

當我們開啟事務模式之后,RabbitMQ 生產者發送消息會多出四個步驟:

  • 客戶端發出請求,將信道設置為事務模式。
  • 服務端給出回復,同意將信道設置為事務模式。
  • 客戶端發送消息。
  • 客戶端提交事務。
  • 服務端給出響應,確認事務提交。

上面的步驟,除了第三步是本來就有的,其他幾個步驟都是平白無故多出來的。所以大家看到,事務模式其實效率有點低,這并非一個最佳解決方案。我們可以想想,什么項目會用到消息中間件?一般來說都是一些高并發的項目,這個時候并發性能尤為重要。

所以,RabbitMQ 還提供了發送方確認機制(publisher confirm)來確保消息發送成功,這種方式,性能要遠遠高于事務模式,一起來看下。

2.2 發送方確認機制

2.2.1 單條消息處理

首先我們移除剛剛關于事務的代碼,然后在 application.properties 中配置開啟消息發送方確認機制,如下:

  1. spring.rabbitmq.publisher-confirm-type=correlated 
  2. spring.rabbitmq.publisher-returns=true 

第一行是配置消息到達交換器的確認回調,第二行則是配置消息到達隊列的回調。

第一行屬性的配置有三個取值:

  • none:表示禁用發布確認模式,默認即此。
  • correlated:表示成功發布消息到交換器后會觸發的回調方法。
  • simple:類似 correlated,并且支持 waitForConfirms() 和 waitForConfirmsOrDie() 方法的調用。

接下來我們要開啟兩個監聽,具體配置如下:

  1. @Configuration 
  2. public class RabbitConfig implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnsCallback { 
  3.     public static final String JAVABOY_EXCHANGE_NAME = "javaboy_exchange_name"
  4.     public static final String JAVABOY_QUEUE_NAME = "javaboy_queue_name"
  5.     private static final Logger logger = LoggerFactory.getLogger(RabbitConfig.class); 
  6.     @Autowired 
  7.     RabbitTemplate rabbitTemplate; 
  8.     @Bean 
  9.     Queue queue() { 
  10.         return new Queue(JAVABOY_QUEUE_NAME); 
  11.     } 
  12.     @Bean 
  13.     DirectExchange directExchange() { 
  14.         return new DirectExchange(JAVABOY_EXCHANGE_NAME); 
  15.     } 
  16.     @Bean 
  17.     Binding binding() { 
  18.         return BindingBuilder.bind(queue()) 
  19.                 .to(directExchange()) 
  20.                 .with(JAVABOY_QUEUE_NAME); 
  21.     } 
  22.  
  23.     @PostConstruct 
  24.     public void initRabbitTemplate() { 
  25.         rabbitTemplate.setConfirmCallback(this); 
  26.         rabbitTemplate.setReturnsCallback(this); 
  27.     } 
  28.  
  29.     @Override 
  30.     public void confirm(CorrelationData correlationData, boolean ack, String cause) { 
  31.         if (ack) { 
  32.             logger.info("{}:消息成功到達交換器",correlationData.getId()); 
  33.         }else
  34.             logger.error("{}:消息發送失敗", correlationData.getId()); 
  35.         } 
  36.     } 
  37.  
  38.     @Override 
  39.     public void returnedMessage(ReturnedMessage returned) { 
  40.         logger.error("{}:消息未成功路由到隊列",returned.getMessage().getMessageProperties().getMessageId()); 
  41.     } 

關于這個配置類,我說如下幾點:

  • 定義配置類,實現 RabbitTemplate.ConfirmCallback 和 RabbitTemplate.ReturnsCallback 兩個接口,這兩個接口,前者的回調用來確定消息到達交換器,后者則會在消息路由到隊列失敗時被調用。
  • 定義 initRabbitTemplate 方法并添加 @PostConstruct 注解,在該方法中為 rabbitTemplate 分別配置這兩個 Callback。

這就可以了。

接下來我們對消息發送進行測試。

首先我們嘗試將消息發送到一個不存在的交換機中,像下面這樣:

  1. rabbitTemplate.convertAndSend("RabbitConfig.JAVABOY_EXCHANGE_NAME",RabbitConfig.JAVABOY_QUEUE_NAME,"hello rabbitmq!".getBytes(),new CorrelationData(UUID.randomUUID().toString())); 

注意第一個參數是一個字符串,不是變量,這個交換器并不存在,此時控制臺會報如下錯誤:

接下來我們給定一個真實存在的交換器,但是給一個不存在的隊列,像下面這樣:

  1. rabbitTemplate.convertAndSend(RabbitConfig.JAVABOY_EXCHANGE_NAME,"RabbitConfig.JAVABOY_QUEUE_NAME","hello rabbitmq!".getBytes(),new CorrelationData(UUID.randomUUID().toString())); 

注意此時第二個參數是一個字符串,不是變量。

可以看到,消息雖然成功達到交換器了,但是沒有成功路由到隊列(因為隊列不存在)。

這是一條消息的發送,我們再來看看消息的批量發送。

2.2.2 消息批量處理

如果是消息批量處理,那么發送成功的回調監聽是一樣的,這里不再贅述。

這就是 publisher-confirm 模式。

相比于事務,這種模式下的消息吞吐量會得到極大的提升。

3. 失敗重試

失敗重試分兩種情況,一種是壓根沒找到 MQ 導致的失敗重試,另一種是找到 MQ 了,但是消息發送失敗了。

兩種重試我們分別來看。

3.1 自帶重試機制

前面所說的事務機制和發送方確認機制,都是發送方確認消息發送成功的辦法。如果發送方一開始就連不上 MQ,那么 Spring Boot 中也有相應的重試機制,但是這個重試機制就和 MQ 本身沒有關系了,這是利用 Spring 中的 retry 機制來完成的,具體配置如下:

  1. spring.rabbitmq.template.retry.enabled=true 
  2. spring.rabbitmq.template.retry.initial-interval=1000ms 
  3. spring.rabbitmq.template.retry.max-attempts=10 
  4. spring.rabbitmq.template.retry.max-interval=10000ms 
  5. spring.rabbitmq.template.retry.multiplier=2 

從上往下配置含義依次是:

  • 開啟重試機制。
  • 重試起始間隔時間。
  • 最大重試次數。
  • 最大重試間隔時間。

間隔時間乘數。(這里配置間隔時間乘數為 2,則第一次間隔時間 1 秒,第二次重試間隔時間 2 秒,第三次 4 秒,以此類推)

配置完成后,再次啟動 Spring Boot 項目,然后關掉 MQ,此時嘗試發送消息,就會發送失敗,進而導致自動重試。

3.2 業務重試

業務重試主要是針對消息沒有到達交換器的情況。

如果消息沒有成功到達交換器,根據我們第二小節的講解,此時就會觸發消息發送失敗回調,在這個回調中,我們就可以做文章了!

整體思路是這樣:

首先創建一張表,用來記錄發送到中間件上的消息,像下面這樣:

每次發送消息的時候,就往數據庫中添加一條記錄。這里的字段都很好理解,有三個我額外說下:

  • status:表示消息的狀態,有三個取值,0,1,2 分別表示消息發送中、消息發送成功以及消息發送失敗。
  • tryTime:表示消息的第一次重試時間(消息發出去之后,在 tryTime 這個時間點還未顯示發送成功,此時就可以開始重試了)。
  • count:表示消息重試次數。

其他字段都很好理解,我就不一一啰嗦了。

在消息發送的時候,我們就往該表中保存一條消息發送記錄,并設置狀態 status 為 0,tryTime 為 1 分鐘之后。

在 confirm 回調方法中,如果收到消息發送成功的回調,就將該條消息的 status 設置為1(在消息發送時為消息設置 msgId,在消息發送成功回調時,通過 msgId 來唯一鎖定該條消息)。

另外開啟一個定時任務,定時任務每隔 10s 就去數據庫中撈一次消息,專門去撈那些 status 為 0 并且已經過了 tryTime 時間記錄,把這些消息拎出來后,首先判斷其重試次數是否已超過 3 次,如果超過 3 次,則修改該條消息的 status 為 2,表示這條消息發送失敗,并且不再重試。對于重試次數沒有超過 3 次的記錄,則重新去發送消息,并且為其 count 的值+1。

大致的思路就是上面這樣,松哥這里就不給出代碼了,松哥的 vhr 里邊郵件發送就是這樣的思路來處理的,完整代碼大家可以參考 vhr 項目(https://github.com/lenve/vhr)。

當然這種思路有兩個弊端:

  • 去數據庫走一遭,可能拖慢 MQ 的 Qos,不過有的時候我們并不需要 MQ 有很高的 Qos,所以這個應用時要看具體情況。
  • 按照上面的思路,可能會出現同一條消息重復發送的情況,不過這都不是事,我們在消息消費時,解決好冪等性問題就行了。

當然,大家也要注意,消息是否要確保 100% 發送成功,也要看具體情況。

4. 小結

好啦,這就是關于消息生產者的一些常見問題以及對應的解決方案,下篇文章松哥和大家探討如果保證消息消費成功并解決冪等性問題。 

本文涉及到的相關源代碼大家可以在這里下載:https://github.com/lenve/javaboy-code-samples。

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

 

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

2024-05-09 08:04:23

RabbitMQ消息可靠性

2018-09-27 14:13:27

云服務可靠故障

2025-01-02 09:23:05

2023-12-18 08:36:39

消息隊列微服務開發

2010-11-09 15:50:47

SQL Server安

2019-07-26 08:00:00

微服務架構

2021-02-02 11:01:31

RocketMQ消息分布式

2010-12-28 19:50:21

可靠性產品可靠性

2021-04-27 07:52:18

RocketMQ消息投遞

2020-11-24 05:59:41

容器

2022-03-07 08:13:06

MQ消息可靠性異步通訊

2024-02-18 19:10:13

CIO

2023-07-21 08:00:00

API數字世界

2023-11-27 13:42:00

消息隊列RocketMQ

2011-05-25 19:31:07

Stratus信息化

2010-12-28 20:16:24

2023-06-02 11:43:58

人工智能AI

2024-07-08 13:19:34

2019-08-30 12:10:05

磁盤數據可靠性RAID

2023-11-06 07:50:00

RabbitMQ交換機
點贊
收藏

51CTO技術棧公眾號

国产欧美中文字幕| 色妞欧美日韩在线| 国产精品亚洲αv天堂无码| 极品美乳网红视频免费在线观看| 日本午夜精品视频在线观看| 久久精品最新地址| 欧美 变态 另类 人妖| 成人在线网站| 亚洲自拍欧美精品| 日韩精品久久久免费观看 | 免费在线性爱视频| 久久国产成人午夜av影院| 韩日精品中文字幕| 多男操一女视频| 日韩黄色网络| 欧美sm极限捆绑bd| 中文字幕成人在线视频| 91破解版在线观看| 亚洲欧美日韩中文播放| 日本精品二区| 天天操天天射天天| 国产福利一区二区| 国产日产久久高清欧美一区| 日本少妇做爰全过程毛片| 婷婷久久一区| 中文字幕亚洲国产| 亚洲av无码国产精品久久| 国产一精品一av一免费爽爽| 欧洲一区二区三区在线| 日韩av综合在线观看| av毛片在线看| 中文字幕在线播放不卡一区| 欧美成人第一区| 国产小视频免费观看| 经典三级在线一区| 国产精品美女www| 免费视频久久久| 亚洲精选国产| 久久久久国色av免费观看性色| 国产福利在线导航| 精品国产乱码久久久| 亚洲黄页网在线观看| 国产精品偷伦视频免费观看了| 青草综合视频| 欧美色视频在线观看| 狠狠热免费视频| 成人性生交大片免费观看网站| 亚洲国产视频a| 17c丨国产丨精品视频| 99热国产在线| 一区二区三区小说| 成人手机在线播放| 91亚洲天堂| 一区二区日韩电影| 91免费国产精品| 影音先锋男人在线资源| 一区二区三区四区国产精品| 久久久成人精品一区二区三区 | av观看免费在线| 涩涩涩视频在线观看| 黄色一区二区三区| 成人免费毛片网| 欧美日韩亚洲国产| 欧美日韩一级片网站| 羞羞的视频在线| 精品亚洲a∨一区二区三区18| 884aa四虎影成人精品一区| www.国产福利| 99香蕉久久| 亚洲精品国产精品自产a区红杏吧| 黄色激情在线观看| 亚洲制服一区| 日韩在线观看精品| 久久av高潮av无码av喷吹| 韩日在线一区| 91精品国产乱码久久久久久蜜臀| 国产第一页浮力| 亚洲国产精品日韩专区av有中文| 欧美精品亚州精品| 日本一区二区网站| 人禽交欧美网站| 成人看片人aa| 人妻91麻豆一区二区三区| 97久久超碰国产精品电影| 日本一区二区三区四区高清视频| 欧美成人视屏| 亚洲韩国精品一区| 手机看片福利日韩| 日韩08精品| 日韩精品视频免费专区在线播放| 国产美女免费网站| 欧美日韩一区二区高清| 日本欧美爱爱爱| 国产精品久久久久久免费播放| 懂色中文一区二区在线播放| 欧美日韩免费精品| 国产成人在线视频免费观看| 欧美日韩黄色大片| 日本中文字幕观看| 女仆av观看一区| 日韩中文理论片| www成人在线| 久久99国产精品久久99果冻传媒| 国产私拍一区| 久热国产在线| 日本韩国精品在线| 精品无码av一区二区三区| 国产一区二区观看| 久久男人av资源网站| 人妻中文字幕一区二区三区| 岛国精品一区二区| 伊甸园精品99久久久久久| 亚洲国产福利| 精品久久久久久最新网址| 日韩av片在线| 午夜在线a亚洲v天堂网2018| 91人成网站www| 激情在线视频| 欧美日韩国产限制| 丰满人妻一区二区三区大胸| 成人高清av| 欧美一级淫片播放口| 亚洲不卡免费视频| 亚洲欧洲精品一区二区精品久久久| 18禁免费无码无遮挡不卡网站| 国产精品xnxxcom| 一本一道久久a久久精品逆3p | 亚洲在线视频免费观看| 簧片在线免费看| 日本午夜精品| 孩xxxx性bbbb欧美| 亚洲精品.www| 一区二区三区在线免费观看| 午夜国产福利在线观看| av在线不卡顿| 国产成人综合一区二区三区| 午夜福利一区二区三区| 亚洲一级在线观看| 丰满人妻一区二区三区53视频| 日韩欧美不卡| 国产精品一区二区久久久| 看电影就来5566av视频在线播放| 亚洲va国产天堂va久久en| 久久av一区二区三| 激情欧美丁香| 国产欧美日本在线| 国产色婷婷在线| 亚洲国产精彩中文乱码av在线播放 | 91麻豆国产福利在线观看| 日韩激情视频一区二区| 视频二区欧美| 欧美国产日韩xxxxx| 99精品免费观看| 亚洲综合一区二区| 亚洲av人人澡人人爽人人夜夜| 欧美日韩调教| 国偷自产av一区二区三区小尤奈| a国产在线视频| 精品五月天久久| 欧美一区二区三区不卡视频| 久久久久久久国产精品影院| 任你操这里只有精品| 日本高清免费电影一区| 国产日韩欧美影视| 性xxxfreexxxx性欧美| 欧美大片一区二区三区| 国产精品99精品| 久久综合九色综合97_久久久| 国内外成人免费激情视频| 国产精品免费大片| 成人久久精品视频| 久草免费在线色站| 日韩国产欧美区| 亚洲av无码乱码国产精品fc2| 国产精品视频麻豆| 国模大尺度视频| 99视频在线精品国自产拍免费观看| 精品蜜桃一区二区三区| 日韩三级影视| 久久久久999| 熟妇人妻中文av无码| 91高清视频在线| xxxx日本少妇| 久久亚区不卡日本| 日本黄色的视频| 一区免费视频| 日本免费高清一区| 涩爱av色老久久精品偷偷鲁| 青草青草久热精品视频在线网站| 在线看的av网站| 欧美大片一区二区三区| 少妇一级淫片日本| 有坂深雪av一区二区精品| 日本一区二区在线免费观看| 日韩精品一区第一页| 蜜臀av性久久久久蜜臀av| 国产ts一区| 国产欧美一区二区三区在线| 成人影音在线| 日韩视频在线一区| 午夜性色福利视频| 欧美日韩综合在线| 欧美成人精品欧美一级乱黄| 中文字幕 久热精品 视频在线| 深夜视频在线观看| 秋霞午夜鲁丝一区二区老狼| av在线免费观看国产| 日韩在线精品| 久热国产精品视频一区二区三区| 精品国产不卡一区二区| 国产xxx69麻豆国语对白| 日本乱理伦在线| 最近2019中文字幕mv免费看| 日产精品久久久久久久性色| 制服.丝袜.亚洲.另类.中文 | 污污的网站在线免费观看| 亚洲视频电影图片偷拍一区| 亚洲欧美激情另类| 欧美老年两性高潮| 波多野结衣激情视频| 午夜伊人狠狠久久| 欧美日韩精品在线观看视频 | 欧美国产在线看| 亚洲欧美综合另类在线卡通| www在线观看免费视频| 成人免费电影视频| 色综合五月婷婷| 免费成人av在线| 国产一区亚洲二区三区| 在线亚洲自拍| 尤物av无码色av无码| 欧美激情一区| 永久免费网站视频在线观看| 国产精品精品国产一区二区| 欧美一级片免费观看| 日韩成人午夜| 国产一区二区三区av在线| 2020最新国产精品| 99久久无色码| 日韩欧美久久| 不卡的av一区| silk一区二区三区精品视频 | 精品在线手机视频| 你懂的网址一区二区三区| 亚洲制服欧美另类| 欧美日韩精品久久久免费观看| 亚洲aaa级| 欧美在线视频二区| 欧美欧美黄在线二区| 欧美日韩免费精品| 欧美视频免费| 亚洲欧洲国产精品久久| 日韩精品免费一区二区三区| 色之综合天天综合色天天棕色| 国产在线观看91一区二区三区| 欧美日韩一区二区视频在线观看| 亚洲另类春色校园小说| 日本不卡久久| 久久性感美女视频| 国产一二三四五| 欧美日韩ab| 日韩a∨精品日韩在线观看| 亚洲青色在线| 日韩在线第三页| 久久精品久久综合| 在线观看免费看片| 成人午夜伦理影院| 三上悠亚ssⅰn939无码播放| 国产午夜亚洲精品羞羞网站| 性少妇xx生活| 亚洲曰韩产成在线| 久久久午夜影院| 欧美亚洲一区二区在线观看| 国产精品毛片久久久久久久av| 91精品国产色综合久久ai换脸 | 日韩精品一区二区三区免费视频| 国产精品美女久久久久av福利| 欧美日韩导航| 亚洲伊人婷婷| 伊人影院久久| 美女一区二区三区视频| 国产美女久久久久| 精品一区二区视频在线观看| 91浏览器在线视频| 少妇高潮惨叫久久久久| 亚洲一二三区不卡| 成人a v视频| 日韩一区二区三区在线视频| 污污视频在线免费看| 中文字幕日韩精品在线观看| 亚洲电影视频在线| 日韩av免费在线观看| 国产精品亚洲欧美日韩一区在线| 国内外成人免费视频| 97精品国产| 人妻有码中文字幕| 国产一区二区免费视频| 青青草福利视频| 亚洲综合男人的天堂| 夜夜躁日日躁狠狠久久av| 欧美成人精品高清在线播放| 黄网在线观看| 久久久久久久久网站| 丁香久久综合| 久久久久久a亚洲欧洲aⅴ| 亚州av乱码久久精品蜜桃| 日韩少妇内射免费播放| 国产一区二区三区免费| 久久av无码精品人妻系列试探| 亚洲欧美日韩电影| 亚洲精品国产精品乱码视色| 精品国产乱码久久久久久影片| 波多野结衣一区二区| 2019中文在线观看| 综合欧美亚洲| 中文字幕第一页亚洲| 视频一区在线播放| 艳妇乳肉豪妇荡乳xxx| 亚洲欧洲韩国日本视频| 黄色片视频免费| 亚洲福利在线观看| 暖暖在线中文免费日本| 国产日韩视频在线观看| 深爱激情久久| 99久久久无码国产精品6| 成人av在线看| 久久亚洲AV无码| 3d动漫精品啪啪一区二区竹菊| 国产在线一二三| 欧美中文字幕在线播放| 成人动漫视频| av日韩在线看| 国产麻豆成人传媒免费观看| 99自拍偷拍视频| 欧美婷婷六月丁香综合色| 国产原创av在线| 国产91精品最新在线播放| 亚洲激情播播| 成人小视频在线看| 久久久久久久电影| 日韩精品一区二区亚洲av观看| 日韩黄色高清视频| 黄色在线免费观看网站| 久久99精品久久久久久久久久| 精品1区2区3区4区| 日本一区二区免费视频| 亚洲午夜一区二区| 亚洲欧美激情在线观看| 欧美激情在线观看视频| 亚洲2区在线| 18禁裸男晨勃露j毛免费观看| 国产精品18久久久久久久久久久久| 日本黄色免费片| 欧美精品一卡两卡| 黄网站免费在线播放| 亚洲最大福利网站| 欧美午夜视频| 久久久午夜精品福利内容| 姬川优奈aav一区二区| 日本大臀精品| 国产精品久久一区主播| 99久久夜色精品国产亚洲狼| 91在线第一页| 亚洲成年人影院| 美州a亚洲一视本频v色道| 国产精品com| 欧美大片aaaa| 日韩在线不卡一区| 亚洲综合在线观看视频| 日本午夜在线视频| 国产精品视频网| 欧美二区视频| 久久久久久久久久久国产精品| 日本道精品一区二区三区| 137大胆人体在线观看| 亚洲一区二区在线| 日韩午夜av在线| 日本美女bbw| 欧美mv日韩mv国产网站app| 成人性生活视频| 中国成人亚色综合网站| 成人国产一区二区三区精品| 国产精品久久久久久人| 久久影院中文字幕| 最新精品国偷自产在线| 亚洲精品中文字幕乱码无线| 亚洲成人一区二区| 成人在线免费观看| 粉嫩av免费一区二区三区| 日本伊人色综合网| 久久综合亚洲色hezyo国产| 亚洲天堂精品在线| 亚洲综合影院| 国产又大又黄又粗又爽| 亚洲午夜成aⅴ人片| www在线免费观看| 黑人巨大精品欧美一区二区小视频 | 欧美在线关看| 一级淫片在线观看| 欧美性xxxx极品hd满灌|