日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RocketMQ源码分析之request-reply特性

發布時間:2023/12/3 编程问答 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RocketMQ源码分析之request-reply特性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.什么是request-reply?

??RocketMQ4.6.0版本中增加了request-reply新特性,該特性允許producer在發送消息后同步或者異步等待consumer消費完消息并返回響應消息,類似rpc調用效果。
2. 使用場景

  • 快速搭建服務總線,實現rpc框架
  • 調用鏈追蹤分析
  • 跨網絡區域實現系統間同步調用

3.使用方法

  • producer端

??producer端調用request(final Message msg, final long timeout)方法以同步方式等待consumer端消費完消息并返回響應消息;調用request(final Message msg, final RequestCallback requestCallback, final long timeout)方法以異步方式等待consumer端消費完消息并返回響應消息。

同步方式:

public class RequestProducer {public static void main(String[] args) throws MQClientException, InterruptedException {String producerGroup = "RequestTopic0218";String topic = "RequestTopic";long ttl = 300000;DefaultMQProducer producer = new DefaultMQProducer(producerGroup);producer.setNamesrvAddr("127.0.0.1:9876");producer.start();try {Message msg = new Message(topic,"","Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));long begin = System.currentTimeMillis();Message retMsg = producer.request(msg, ttl);long cost = System.currentTimeMillis() - begin;System.out.printf("request to <%s> cost: %d replyMessage: %s %n", topic, cost, retMsg);} catch (Exception e) {e.printStackTrace();}producer.shutdown();} }

異步方式:

public class AsyncRequestProducer {private static final InternalLogger log = ClientLogger.getLog();public static void main(String[] args) throws MQClientException, InterruptedException {String producerGroup = "please_rename_unique_group_name";String topic = "AsynRequestTopic";long ttl = 3000;DefaultMQProducer producer = new DefaultMQProducer(producerGroup);producer.start();try {Message msg = new Message(topic,"","Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));long begin = System.currentTimeMillis();producer.request(msg, new RequestCallback() {@Overridepublic void onSuccess(Message message) {long cost = System.currentTimeMillis() - begin;System.out.printf("request to <%s> cost: %d replyMessage: %s %n", topic, cost, message);}@Overridepublic void onException(Throwable e) {System.err.printf("request to <%s> fail.", topic);}}, ttl);} catch (Exception e) {log.warn("", e);}/* shutdown after your request callback is finished */ // producer.shutdown();} }
  • consumer端

??consumer端程序在原來的基礎上會增加以下內容:

??(1)創建producer用來發送消息

??(2)在消費完消息后調用RocketMQ提供的MessageUtil.createReplyMessage(final Message requestMessage, final byte[] body)方法來構建響應消息

??(3)調用send方法將響應消息發回給生產者

public class ResponseConsumer {public static void main(String[] args) throws InterruptedException, MQClientException {String producerGroup = "ReplyProducer0218";String consumerGroup = "ResponseConsumer0218";String topic = "RequestTopic";// create a producer to send reply messageDefaultMQProducer replyProducer = new DefaultMQProducer(producerGroup);replyProducer.setNamesrvAddr("127.0.0.1:9876");replyProducer.start();// create consumerDefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);// recommend client configsconsumer.setPullTimeDelayMillsWhenException(0L);consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);for (MessageExt msg : msgs) {try {System.out.printf("handle message: %s", msg.toString());String replyTo = MessageUtil.getReplyToClient(msg);byte[] replyContent = "reply message contents.".getBytes();// create reply message with given util, do not create reply message by yourselfMessage replyMessage = MessageUtil.createReplyMessage(msg, replyContent);// send reply message with producerSendResult replyResult = replyProducer.send(replyMessage, 300000);System.out.printf("reply to %s , %s %n", replyTo, replyResult.toString());} catch (MQClientException | RemotingException | MQBrokerException | InterruptedException e) {e.printStackTrace();}}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}});consumer.subscribe(topic, "*");consumer.setNamesrvAddr("127.0.0.1:9876");consumer.start();System.out.printf("Consumer Started.%n");} }
  • 源碼分析
  • 在RocketMQ中producer端可以通過調用以下兩個方法發送消息并等待consumer端返回響應消息:

    • request(final Message msg, final long timeout)
    • request(final Message msg, final RequestCallback requestCallback, final long timeout)

    下面以producer同步等待consumer響應消息為例分析整個request-reply的過程:

    public Message request(Message msg,long timeout) throws RequestTimeoutException, MQClientException, RemotingException, MQBrokerException, InterruptedException {long beginTimestamp = System.currentTimeMillis();prepareSendRequest(msg, timeout);final String correlationId = msg.getProperty(MessageConst.PROPERTY_CORRELATION_ID);try {final RequestResponseFuture requestResponseFuture = new RequestResponseFuture(correlationId, timeout, null);RequestFutureTable.getRequestFutureTable().put(correlationId, requestResponseFuture);long cost = System.currentTimeMillis() - beginTimestamp;this.sendDefaultImpl(msg, CommunicationMode.ASYNC, new SendCallback() {@Overridepublic void onSuccess(SendResult sendResult) {requestResponseFuture.setSendRequestOk(true);}@Overridepublic void onException(Throwable e) {requestResponseFuture.setSendRequestOk(false);requestResponseFuture.putResponseMessage(null);requestResponseFuture.setCause(e);}}, timeout - cost);return waitResponse(msg, timeout, requestResponseFuture, cost);} finally {RequestFutureTable.getRequestFutureTable().remove(correlationId);}}

    (1)獲取系統當前時間,方便后續進行超時判斷

    (2)調用prepareSendRequest(final Message msg, long timeout)函數將待發送給broker的消息進行改造,具體改造如下:

    • 調用CorrelationIdUtil.createCorrelationId()生成該消息的correlationId,并將correlationId添加到消息的擴展屬性CORRELATION_ID
    • 獲取producer的clientId并將其添加到消息的擴展屬性REPLY_TO_CLIENT,該屬性的作用在于后續consumer端發送響應消息時broker知道將消息發送給哪個producer端
    • 將超時時間添加到消息的擴展屬性TTL

    (3)構建RequestResponseFuture對象,這里需要詳細解釋RequestResponseFuture對象,RequestResponseFuture是實現request-reply特性的關鍵,producer發送的每條消息都會new一個RequestResponseFuture對象:

    • correlationId是CorrelationIdUtil.createCorrelationId()方法隨機生成的UUID字符串,correlationId是用來標識從發送每條消息到conumer端發送響應消息的請求
    • requestMsg是consumer端返回的響應消息
    • countDownLatch在消息發送時會阻塞producer線程(調用了await實現阻塞),等到響應消息返回時激活producer線程,最后返回consumer端響應消息,所以雖然在內部實現上是以異步方式發送消息但是結合countDownLatch達到了同步的效果
    • 由于是同步發送所以requestCallback為null
    public class RequestResponseFuture {private final String correlationId;private final RequestCallback requestCallback;private final long beginTimestamp = System.currentTimeMillis();private final Message requestMsg = null;private long timeoutMillis;private CountDownLatch countDownLatch = new CountDownLatch(1);private volatile Message responseMsg = null;private volatile boolean sendRequestOk = true;private volatile Throwable cause = null;

    (4)將<correlationId, requestResponseFuture>添加到requestFutureTable,后續consumer向broker發送RequestCode.SEND_REPLY_MESSAGE_V2請求將響應消息發送到broker,broker在處理這個請求時會調用pushReplyMessage方法發送RequestCode.PUSH_REPLY_MESSAGE_TO_CLIENT請求給producer,此時producer端會根據響應消息中correlationId在requestFutureTable中獲取其對應的requestResponseFuture,并且會將響應消息賦給requestResponseFuture中的responseMsg。

    (5)調用sendDefaultImpl方法以異步的方式發送消息,雖然是以異步方式發送消息但是結合RequestResponseFuture中的countDownLatch到達了同步效果。此時producer發送了RequestCode.SEND_MESSAGE請求給broker,broker后續的處理過程與發送普通消息是一樣的。

    (6)consumer在正常消費完消息后,需要調用MessageUtil.createReplyMessage方法構建響應消息,該方法有兩個參數,分別是producer發送消息和響應消息體內容,該方法會從producer發送的消息的擴展屬性中獲取“CLUSTER”、“REPLY_TO_CLIENT”、“CORRELATION_ID”和“TTL”,并根據這些擴展屬性以及響應消息體內容構建響應消息。這里需要注意,新構建的響應消息的topic是由producer發送的消息的擴展屬性中的CLUSTER與REPLY_TOPIC拼接起來,即“集群名稱_REPLY_TOPIC”,這個是一個系統級別的topic,是由broker自己創建的。

    public static Message createReplyMessage(final Message requestMessage, final byte[] body) throws MQClientException {if (requestMessage != null) {Message replyMessage = new Message();String cluster = requestMessage.getProperty(MessageConst.PROPERTY_CLUSTER);String replyTo = requestMessage.getProperty(MessageConst.PROPERTY_MESSAGE_REPLY_TO_CLIENT);String correlationId = requestMessage.getProperty(MessageConst.PROPERTY_CORRELATION_ID);String ttl = requestMessage.getProperty(MessageConst.PROPERTY_MESSAGE_TTL);replyMessage.setBody(body);if (cluster != null) {String replyTopic = MixAll.getReplyTopic(cluster);replyMessage.setTopic(replyTopic);MessageAccessor.putProperty(replyMessage, MessageConst.PROPERTY_MESSAGE_TYPE, MixAll.REPLY_MESSAGE_FLAG);MessageAccessor.putProperty(replyMessage, MessageConst.PROPERTY_CORRELATION_ID, correlationId);MessageAccessor.putProperty(replyMessage, MessageConst.PROPERTY_MESSAGE_REPLY_TO_CLIENT, replyTo);MessageAccessor.putProperty(replyMessage, MessageConst.PROPERTY_MESSAGE_TTL, ttl);return replyMessage;} else {throw new MQClientException(ClientErrorCode.CREATE_REPLY_MESSAGE_EXCEPTION, "create reply message fail, requestMessage error, property[" + MessageConst.PROPERTY_CLUSTER + "] is null.");}}throw new MQClientException(ClientErrorCode.CREATE_REPLY_MESSAGE_EXCEPTION, "create reply message fail, requestMessage cannot be null.");}

    (7)調用send方法發送響應消息到broker,在發送的過程中會判斷消息的類型,由于該消息是reply類型的,所以向broker發送的請求類型是RequestCode.SEND_REPLY_MESSAGE_V2

    (8)broker處理RequestCode.SEND_REPLY_MESSAGE_V2請求的是ReplyMessageProcessor,具體操作如下:

    • 根據請求中響應消息的topic、queueId、消息體內容、消息標記、消息的擴展屬性、消息產生的時間、消息的來源等信息構建MessageExtBrokerInner對象
    • 調用pushReplyMessage方法構建RequestCode.PUSH_REPLY_MESSAGE_TO_CLIENT請求,然后根據消息擴展屬性REPLY_TO_CLIENT獲取broker與producer連接的channel,最后將請求發送給producer。這里有個問題:RocketMQ如何保證請求原路返回?首先producer產生的消息會發送到broker上,此時broker中存儲的producer產生的消息的擴展屬性中是包含存儲的broker的集群名稱的,接著consumer消息該消息并根據該消息構造出響應消息,在構造響應消息時,其topic是“集群名稱_REPLY_TOPIC”,這樣就保證了consumer在發送響應消息到broker是原路返回,即這里的broker是與producer連接的broker。
    • 判斷broker端的配置文件中storeReplyMessageEnable配置項的值是否為true,如果為true,則會將響應消息存儲在broker端。storeReplyMessageEnable的默認值是true。
    MessageExtBrokerInner msgInner = new MessageExtBrokerInner(); msgInner.setTopic(requestHeader.getTopic()); msgInner.setQueueId(queueIdInt); msgInner.setBody(body); msgInner.setFlag(requestHeader.getFlag()); MessageAccessor.setProperties(msgInner, MessageDecoder.string2messageProperties(requestHeader.getProperties())); msgInner.setPropertiesString(requestHeader.getProperties()); msgInner.setBornTimestamp(requestHeader.getBornTimestamp()); msgInner.setBornHost(ctx.channel().remoteAddress()); msgInner.setStoreHost(this.getStoreHost()); msgInner.setReconsumeTimes(requestHeader.getReconsumeTimes() == null ? 0 : requestHeader.getReconsumeTimes());PushReplyResult pushReplyResult = this.pushReplyMessage(ctx, requestHeader, msgInner); this.handlePushReplyResult(pushReplyResult, response, responseHeader, queueIdInt);if (this.brokerController.getBrokerConfig().isStoreReplyMessageEnable()) {PutMessageResult putMessageResult = this.brokerController.getMessageStore().putMessage(msgInner);this.handlePutMessageResult(putMessageResult, request, msgInner, responseHeader, sendMessageContext, queueIdInt); }

    (9)producer處理broker發送的RequestCode.PUSH_REPLY_MESSAGE_TO_CLIENT請求的是ClientRemotingProcessor,具體如下:

    • 根據請求還原響應消息MessageExt
    • 獲取響應消息擴展屬性CORRELATION_ID的值correlationId,在producer端的requestFutureTable中根據correlationId獲取該消息對應的requestResponseFuture,然后將響應消息放入到requestResponseFuture中的responseMsg并將countDownLatch的值減一,此時producer端調用request方法的線程就激活了
    • 從requestFutureTable中刪除key為correlationId的數據項
    private void processReplyMessage(MessageExt replyMsg) {final String correlationId = replyMsg.getUserProperty(MessageConst.PROPERTY_CORRELATION_ID);final RequestResponseFuture requestResponseFuture = RequestFutureTable.getRequestFutureTable().get(correlationId);if (requestResponseFuture != null) {requestResponseFuture.putResponseMessage(replyMsg);RequestFutureTable.getRequestFutureTable().remove(correlationId);if (requestResponseFuture.getRequestCallback() != null) {requestResponseFuture.getRequestCallback().onSuccess(replyMsg);} else {requestResponseFuture.putResponseMessage(replyMsg);}} else {String bornHost = replyMsg.getBornHostString();log.warn(String.format("receive reply message, but not matched any request, CorrelationId: %s , reply from host: %s",correlationId, bornHost));}}

    (10)producer端調用request方法線程激活后會調用waitResponse方法返回requestResponseFuture中的responseMsg,這里最終調用的waitResponseMessage方法中帶有一個參數:超時時間,如果到了超時時間后consumer端的響應消息沒有被producer端收到,線程也會被激活,這樣的設置也是防止producer線程一直被阻塞。

    參考資料: 官方視頻鏈接.

    總結

    以上是生活随笔為你收集整理的RocketMQ源码分析之request-reply特性的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    欧美巨大 | 亚洲精品小视频 | 久久久国产精华液 | 久久久久这里只有精品 | 国产99久久99热这里精品5 | 久在线 | 韩国一区二区av | 久久久www成人免费毛片麻豆 | aav在线| 国产a国产a国产a | 久久亚洲福利 | 久久久精选 | 天天色天天射综合网 | 日本黄区免费视频观看 | www.夜夜| 婷婷网五月天 | 韩国视频一区二区三区 | 香蕉视频在线播放 | 97精品超碰一区二区三区 | 草久热 | 日本特黄一级 | 午夜影视剧场 | 国产精品久久一区二区三区不卡 | 国产精品入口麻豆www | 99久久精品久久亚洲精品 | 亚洲 欧美 国产 va在线影院 | 久久av网| 国产精品18久久久久久不卡孕妇 | 五月天婷婷综合 | 91久久在线观看 | 国产成人l区| 日韩在线无 | 国产99久久久久久免费看 | 国产亚洲视频在线免费观看 | 在线视频第一页 | 麻豆高清免费国产一区 | 96视频在线 | www久 | 国产成人在线观看免费 | 玖玖精品视频 | 在线观看免费成人av | 日本中文在线 | 四虎影视成人永久免费观看亚洲欧美 | 99久久精品无免国产免费 | 天天爽天天碰狠狠添 | av电影一区二区 | 午夜精品久久久99热福利 | 中文字幕人成不卡一区 | 国产精品久久9 | 成年人三级网站 | 国产精品综合久久久久久 | 97国产电影| 国产精品毛片 | 亚洲香蕉视频 | 欧美性生交大片免网 | 97国产在线 | 久福利 | 亚洲日日射| 国产精品区二区三区日本 | 九九热av| 91av在线免费| 亚洲黄色激情小说 | 久久极品| av在线播放观看 | 久草在线看片 | 久久精品一区二 | 久草 | 人人dvd | 日韩理论 | 日韩精品一区二区三区第95 | 色综合在 | 黄污视频网站 | 五月天伊人| 欧美夫妻性生活电影 | 黄色av电影 | www视频在线观看 | 免费a视频 | 99婷婷狠狠成为人免费视频 | www.五月天激情 | 日韩一区二区免费在线观看 | 欧美成人手机版 | 久草精品资源 | 久久久久久久久久久高潮一区二区 | 久久久鲁 | 国产中年夫妇高潮精品视频 | 成人一区二区在线观看 | 91在线在线观看 | 九九久久精品视频 | 18久久久久久 | 91丨精品丨蝌蚪丨白丝jk | 操天天操 | 免费看黄色小说的网站 | 少妇搡bbbb搡bbb搡aa | 性色av一区二区三区在线观看 | 婷婷在线网 | 国产999| 国产午夜精品一区二区三区 | 99视频+国产日韩欧美 | 久久久免费精品国产一区二区 | 99人久久精品视频最新地址 | 区一区二区三在线观看 | 国产成人精品区 | 国产视频每日更新 | 2019免费中文字幕 | 亚洲成a人片综合在线 | 日韩三级av | 中文字幕丝袜制服 | 高清免费av在线 | 在线亚洲欧美日韩 | 日韩有码在线观看视频 | 97韩国电影| 日本久久免费电影 | 国产在线精品一区二区三区 | 婷婷在线综合 | 国产精品中文在线 | 在线三级av | 在线观看日韩免费视频 | 日韩精品一卡 | 在线观看日本高清mv视频 | 日韩性色| 91精品爽啪蜜夜国产在线播放 | 91爱爱视频 | 香蕉视频在线免费 | 91精品国产99久久久久久久 | 九九色网 | 激情伊人五月天久久综合 | 在线免费观看的av | a'aaa级片在线观看 | 91精品国产99久久久久久久 | 亚州欧美精品 | 欧美91成人网| 天天干天天在线 | 色www.| 日日射av | 亚洲精品黄网站 | 精品国产亚洲日本 | 探花视频免费观看 | 中文永久免费观看 | 日韩mv欧美mv国产精品 | 婷婷成人在线 | 久久综合九色 | 欧美激情综合色 | 久久五月天综合 | 日日操网| 91最新网址 | 久久国产热视频 | 四虎在线影视 | 国产美女黄网站免费 | 五月婷婷综 | 毛片1000部免费看 | 欧美一级免费片 | 一区二区中文字幕在线播放 | 久久6精品 | 人人爽人人爽人人片av | 国产九色91 | 欧美激情h | 亚洲一二三久久 | 92中文资源在线 | 在线不卡的av| 一区二区三区在线电影 | 亚洲精选在线观看 | 国产精品女人网站 | 中文字幕高清在线 | 很黄很污的视频网站 | 久久精品精品 | 中文字幕一区av | 日韩av黄 | 日韩免费观看视频 | 久久精品99北条麻妃 | 狠狠干夜夜操天天爽 | 午夜色婷婷 | 91麻豆精品国产91久久久久久 | 亚洲 中文 欧美 日韩vr 在线 | 亚洲国产精品传媒在线观看 | 国产专区在线 | 国产精品不卡在线播放 | av3级在线 | 日日日干 | 日日操天天爽 | a黄色片在线观看 | 国产第一页在线播放 | 91精品在线播放 | 久久久www成人免费毛片麻豆 | 国产中文在线观看 | 毛片视频电影 | 五月天婷婷在线视频 | 国产伦精品一区二区三区四区视频 | 国产裸体无遮挡 | 99免费看片| 97视频精品| 久久 精品一区 | 日韩久久午夜一级啪啪 | 东方av在| 天天做日日做天天爽视频免费 | 97国产超碰在线 | 99精品免费在线观看 | 在线精品视频免费播放 | 亚洲精品国产精品久久99 | 正在播放亚洲精品 | 精品国产一区二 | 玖玖在线免费视频 | 懂色av一区二区在线播放 | 99久久精品国产一区二区三区 | 激情综合站 | 亚洲国产欧洲综合997久久, | 国产人成精品一区二区三 | 久久一区二区三区国产精品 | 天天操天天摸天天射 | 免费一级片在线 | 免费看片网站91 | 操综合| 婷婷综合av | 精品国产激情 | 五月婷婷丁香激情 | 91在线色| 国产黄色大片 | 国产精品都在这里 | 91片在线观看 | av在线播放不卡 | 不卡的av电影 | 亚洲经典视频在线观看 | 天天操天天操天天操天天操 | 依人成人综合网 | 国语精品免费视频 | 中文字幕亚洲精品在线观看 | 国产精品久久99综合免费观看尤物 | 九九爱免费视频 | 日p在线观看 | 午夜久久影视 | 国产精品亚 | 精品美女在线视频 | 狠狠干电影 | 欧美一级片在线 | 国产精品免费观看久久 | 国产资源中文字幕 | 韩日电影在线 | 亚洲区另类春色综合小说 | 国产手机视频精品 | 国产精品视频最多的网站 | 天天天综合网 | 8x成人在线 | 国产精品99久久久久久久久久久久 | 国产美女网 | 国产视频不卡一区 | 96看片| 日韩精品中文字幕一区二区 | 五月综合久久 | 深爱开心激情网 | 在线播放国产精品 | 国产精品一区二区三区久久 | 亚洲精品字幕在线观看 | 探花视频在线观看免费 | www.91国产 | 黄色av成人在线 | 久久综合五月天婷婷伊人 | 日韩色综合网 | 国产91免费在线观看 | 亚洲男男gⅴgay双龙 | 激情综合站 | 97视频免费| 手机av在线网站 | 日韩欧美中文 | 免费a v网站 | 特级西西444www大精品视频免费看 | 在线91观看 | 久久伊人操 | 亚洲经典视频 | 可以免费看av | 97福利视频| 成人av网站在线 | 国产精品日韩精品 | 五月综合色婷婷 | 超碰国产在线播放 | 一区二区欧美日韩 | 五月综合激情 | 久久久久免费精品视频 | 国产又粗又猛又爽又黄的视频先 | 久久av网| 一级电影免费在线观看 | 国产精品嫩草影院99网站 | 亚洲国产高清在线观看视频 | 色小说av| 国产资源av | av一本久道久久波多野结衣 | 开心综合网 | 欧美狠狠色| 久久艹国产视频 | 久操久| 久久久久久久久电影 | 久久免费国产视频 | 九九爱免费视频在线观看 | 亚洲春色成人 | 国产精品福利无圣光在线一区 | 天天干天天玩天天操 | 国产一级电影免费观看 | 中文字幕在线看视频 | 国产一区视频在线观看免费 | 精品视频免费在线 | 久久久久成人免费 | 午夜精品久久久久久99热明星 | 在线天堂v | 欧美日本日韩aⅴ在线视频 插插插色综合 | 激情视频一区二区三区 | 成人av影院在线观看 | 亚洲人久久久 | 国产小视频在线观看免费 | 国产成视频在线观看 | 免费日韩一区二区三区 | 免费看特级毛片 | 国内精品久久久久久中文字幕 | 亚洲精品午夜久久久久久久 | 欧美人体xx | 日韩草比| 午夜男人影院 | 在线免费中文字幕 | 天天操天天谢 | 午夜精品一区二区三区四区 | 欧美一级xxxx | av网站在线观看免费 | 又黄又爽的视频在线观看网站 | 成人免费一区二区三区在线观看 | av在线等 | 97日日碰人人模人人澡分享吧 | 在线免费观看视频一区 | 九九亚洲视频 | 亚洲欧美成人在线 | 99热在| 69视频永久免费观看 | 成人在线免费观看视视频 | 在线播放第一页 | 日韩乱理 | 97视频免费在线 | 日韩欧美国产激情在线播放 | 日本xxxx.com| www.日日操.com | 成人av一二三区 | 人人超碰在线 | 国产婷婷精品av在线 | 国产成人l区 | 久久精品屋 | 欧美午夜精品久久久久久浪潮 | 日本一区二区三区免费看 | 在线看片a| 亚洲美女精品区人人人人 | 亚洲精品在线看 | 亚洲国产中文字幕在线视频综合 | 91九色在线观看视频 | 亚洲劲爆av| 黄色毛片大全 | 在线电影日韩 | 免费在线国产 | 毛片网站在线观看 | 婷婷久久网 | 人人爽人人舔 | 国产高清精 | 国产精品免费一区二区三区 | 国产精品久久久久久久久久久久午夜片 | 久久久国产一区二区三区四区小说 | 欧美国产三区 | 免费在线观看污网站 | 色综合五月天 | 国产精品99久久久久久武松影视 | 久久高清毛片 | 久久国产精品99久久久久久进口 | 久久网站最新地址 | 在线观看亚洲精品视频 | 在线亚州 | 色婷婷综合久久久中文字幕 | 高清视频一区二区三区 | 精品1区二区 | 色在线网| 午夜免费视频网站 | 99c视频高清免费观看 | 成人手机在线视频 | 色婷婷亚洲精品 | 国产亚洲精品久久久久久久久久久久 | 一区二区三区在线视频111 | 一区二区三区在线电影 | 中文字幕在线观看免费高清电影 | 国产网站色 | 国产黄色视| 久热只有精品 | 成年人在线免费看视频 | www.日日操.com| 在线观看视频一区二区 | 久久这里只有精品1 | 黄色免费网 | 国产亚洲精品久久久久久电影 | 久久久精品高清 | 亚洲欧美怡红院 | 欧美日韩午夜 | 精品一区二区三区久久久 | 久久久久成人精品免费播放动漫 | www成人精品 | 婷五月天激情 | 极品久久久久久久 | 丁香六月婷 | 五月天婷亚洲天综合网精品偷 | 狠狠干狠狠插 | 国产一级二级在线 | 日韩av进入 | 国产一区欧美日韩 | 日韩在线二区 | 国产美女精彩久久 | 国产在线久草 | 亚洲国产一二三 | 国产色秀视频 | av线上看 | 国产精品久久久久久电影 | 在线91视频 | 国产精品女同一区二区三区久久夜 | 亚洲成人精品 | 亚洲97在线 | www.五月激情.com | 日本午夜在线亚洲.国产 | 奇米影音四色 | 亚洲欧美va| 亚洲婷婷综合色高清在线 | 狠狠干中文字幕 | av日韩中文 | 久草久视频 | 摸bbb搡bbb搡bbbb | 国产天天爽| 国产精品手机在线 | 日日操天天操狠狠操 | 国产福利在线免费 | 日本中出在线观看 | 午夜丁香视频在线观看 | 亚洲国产视频直播 | www.色com| 免费色网站 | 国产 av 日韩| 国产精品精品国产婷婷这里av | 色婷婷久久久综合中文字幕 | 在线观看成人 | 麻豆视频国产 | 国产精品一区二区久久精品 | 天天弄天天干 | 欧美激情视频一二区 | 久久电影网站中文字幕 | 欧美日韩免费一区二区 | 国产精品久久电影网 | 在线成人高清电影 | 一区二区不卡在线观看 | 午夜精品久久久久久久99 | 欧美网站黄色 | 女人18毛片90分钟 | 亚洲jizzjizz日本少妇 | 中文字幕在线播放日韩 | 人人爱天天操 | 亚洲久草网 | 久久精品国产99国产 | 色视频网页 | 久草| 在线观看中文字幕亚洲 | 久草爱 | 中文字幕影视 | 五月天综合婷婷 | 成人a级免费视频 | 91视频国产高清 | 91看片在线播放 | 九九热久久免费视频 | 成人91在线观看 | 成人影视免费 | 夜夜夜夜操 | 日韩精品中文字幕一区二区 | 在线视频欧美日韩 | 国产一区在线免费 | 久久色亚洲| 国产成人精品一区二区三区 | 999成人| 国产精品尤物 | 日韩欧美国产激情在线播放 | 日本免费久久高清视频 | 天天操天天摸天天干 | 亚洲在线视频免费 | 777视频在线观看 | av中文字幕剧情 | 国产剧情在线一区 | 天天操天天干天天操天天干 | 天天综合网久久综合网 | 视频高清 | 丰满少妇麻豆av | 亚洲成人软件 | 久九视频| 久久久久久久国产精品 | 亚洲欧美日本国产 | 亚洲精品网页 | 在线观看黄网 | 欧美日韩国产精品一区二区亚洲 | 久草在线视频首页 | 成人影视免费 | 免费国产亚洲视频 | 久久涩涩网站 | 日韩在线激情 | 亚洲年轻女教师毛茸茸 | 91精品免费| 超碰在线94 | 午夜精品福利一区二区三区蜜桃 | 国产精品一区二区三区免费视频 | 国产精品久久久999 国产91九色视频 | 日韩在线首页 | 97精品超碰一区二区三区 | 亚洲最大激情中文字幕 | 国产精品丝袜久久久久久久不卡 | 国产精品一区二区三区在线 | 国产精品久久影院 | 日韩中文字幕亚洲一区二区va在线 | 亚洲五月婷 | 亚州国产精品久久久 | 免费国产在线观看 | 狠狠色免费 | 欧美十八 | 亚洲国产片 | 久久久黄色 | 天天射色综合 | 国产日韩一区在线 | 国产美女视频免费观看的网站 | 四月婷婷在线观看 | 中文字幕视频网站 | 国产一区二区三精品久久久无广告 | 天天鲁一鲁摸一摸爽一爽 | 98超碰在线| 激情欧美丁香 | 亚洲资源 | 九九免费在线观看视频 | 一区二区三区免费在线观看视频 | 成人午夜精品福利免费 | 三级黄色大片在线观看 | 成人一级片免费看 | 天天操狠狠操夜夜操 | 国产不卡在线视频 | 手机看片国产日韩 | 免费看污网站 | 人人草在线视频 | 欧美专区亚洲专区 | 国产精品国产三级国产不产一地 | 5月丁香婷婷综合 | 日狠狠| 国产精品久久网 | 色婷婷在线播放 | 欧美国产日韩在线观看 | 日韩午夜电影 | 五月丁香 | 99国产在线| 黄色的视频网站 | 日韩免费在线观看视频 | 少妇视频一区 | 国产高清视频免费在线观看 | 亚洲精品国产拍在线 | av福利第一导航 | 99免费在线观看视频 | 欧美日韩另类在线观看 | 五月天综合色 | 亚洲视频高清 | 色就色,综合激情 | 亚洲精品ww | 日韩r级电影在线观看 | 日韩欧美视频免费在线观看 | 超碰人人av| 婷婷丁香激情网 | 日本中文字幕电影在线免费观看 | 热久久99这里有精品 | 国产在线观看黄 | 亚洲国产色一区 | 欧美日韩电影在线播放 | 国产一二三四在线视频 | 中文字幕中文字幕在线中文字幕三区 | 国产精品久久久久久久免费 | 91精品老司机久久一区啪 | 在线岛国av| 成人免费在线观看入口 | 亚洲欧美日韩精品久久久 | 亚洲精品视频免费在线观看 | 香蕉网在线播放 | 亚洲h视频在线 | 91麻豆精品国产91久久久久 | 999电影免费在线观看 | 天天射天天干天天 | 国产一区网址 | 国产中文字幕视频在线 | 免费看片日韩 | 2019中文字幕网站 | 中文乱码视频在线观看 | 91免费网站在线观看 | 国色天香第二季 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 五月婷婷色丁香 | 久久综合福利 | 国产最顶级的黄色片在线免费观看 | 久草久热| 天天干天天射天天插 | 六月婷婷网 | 国产女人免费看a级丨片 | 成人午夜电影网 | 美女中文字幕 | 日韩免费久久 | 欧美在线一 | 在线观看aa | 精品毛片在线 | 狠狠狠狠狠狠 | 麻豆国产网站 | 99精品在线观看 | 欧美色婷婷 | 国产系列精品av | www.国产在线观看 | 超级碰碰免费视频 | 国产精品久久久久久久久久 | 午夜精品一区二区三区免费视频 | 国产1区在线 | 黄色av一级片| 中国成人一区 | 国内精品国产三级国产aⅴ久 | 久久久久久黄 | 狠狠狠干狠狠 | 亚洲欧美日韩一级 | 99热999| 日韩精品一区电影 | 国产精品综合av一区二区国产馆 | 国产一级片播放 | 国产一级二级三级视频 | 亚洲人成在线观看 | 中文字幕a在线 | 免费日韩一区 | 亚洲va在线va天堂 | 亚洲成人av一区二区 | 久av在线 | 亚洲热久久| 亚洲资源 | 午夜精品一区二区三区在线 | 久久久五月天 | 亚洲黄色免费在线 | 色婷婷在线观看视频 | 日韩视频在线不卡 | 亚洲电影网站 | 在线观看www91| av三级在线播放 | 欧美做受69 | 精品日韩中文字幕 | av成人黄色 | 狠狠操天天射 | 91片网 | 五月天激情综合网 | 成片人卡1卡2卡3手机免费看 | 九九有精品 | 久久免费精彩视频 | 欧美日韩一区二区视频在线观看 | 国产亚洲欧美精品久久久久久 | 麻豆91精品91久久久 | 91中文字幕在线 | 黄色特级毛片 | 91视频久久久久久 | 欧美日韩一二三四区 | 久久激情综合网 | 久久综合九色综合97婷婷女人 | 深爱激情久久 | 婷婷在线色| 国产福利91精品一区 | av天天澡天天爽天天av | 少妇做爰k8经典 | 亚洲综合色av | 91福利免费| 九九视频精品在线 | 久久精品99久久久久久2456 | 五月天中文字幕 | 亚洲精品国精品久久99热一 | 在线观看激情av | 国产精品乱码一区二区视频 | 精品国产乱码久久久久久1区二区 | 波多野结衣电影一区二区 | 黄色最新网址 | 国产色网 | 日韩最新av在线 | 99久久日韩精品免费热麻豆美女 | 国产人成在线视频 | 成人毛片在线视频 | 高清精品视频 | 日日爽日日操 | 午夜电影中文字幕 | 一本到在线 | 国产美女精品视频 | 欧美成人一区二区 | 91香蕉视频污在线 | 岛国大片免费视频 | 婷婷深爱网| 久久久久亚洲天堂 | 香蕉视频久久 | 成人avav| 久久在现视频 | 久久免费毛片视频 | 亚洲 欧洲av | 日本中文字幕在线观看 | 国内精品毛片 | 香蕉久久久久 | 91大神精品视频在线观看 | 国产明星视频三级a三级点| 99热精品国产 | 国产 字幕 制服 中文 在线 | 成人免费看黄 | av九九| 国产免费一区二区三区最新 | 亚洲精品乱码久久久久久按摩 | 高清在线观看av | av中文在线播放 | 天天操天天操天天操天天操天天操 | 日韩在线视频网址 | 999久久久久 | 日韩资源视频 | 人人玩人人弄 | 三级性生活视频 | a成人在线| 中文字幕在线第一页 | av中文电影 | 亚洲激情一区二区三区 | 狠狠色丁香久久婷婷综合_中 | 久久久亚洲精华液 | 草久久影院 | 99久久久久久国产精品 | 国产精品一区二区精品视频免费看 | 在线免费国产视频 | 久久久久久久久久免费视频 | 久操视频在线免费看 | 国产日产精品一区二区三区四区 | 精品在线视频观看 | 国产色在线观看 | 97超碰超碰| 91传媒激情理伦片 | 最新色视频 | 久久99国产综合精品免费 | 日韩一区二区三 | 九九九在线 | 97人人超碰在线 | 在线免费观看欧美日韩 | 91精彩在线视频 | 98久9在线 | 免费 | 亚洲一级电影在线观看 | 97看片吧 | 中文字幕在线观 | 手机av电影在线观看 | 久久精品99国产精品亚洲最刺激 | 国产成人精品一区二区三区福利 | 久久精品99北条麻妃 | 国产精品一区二区中文字幕 | 91九色蝌蚪视频 | 国产成人黄色网址 | 91精品国产91久久久久久三级 | av在线免费在线 | 天天插视频 | av在线不卡观看 | 国产中文 | 伊人电影在线观看 | av片在线看 | 国产成人在线播放 | 日韩av视屏| 国产.精品.日韩.另类.中文.在线.播放 | 午夜久久久久久久久久久 | 亚洲国产精品va在线看 | 欧美福利久久 | 国产91区| 四虎影视精品 | 日韩中文字幕免费在线观看 | 成人欧美一区二区三区在线观看 | 射综合网 | 一级一片免费观看 | 日韩精品视频在线免费观看 | 中中文字幕av在线 | 手机看片中文字幕 | 狠狠色噜噜狠狠狠合久 | 色婷婷国产精品一区在线观看 | 国产一级淫片免费看 | 国产精品99久久久久久宅男 | 色综合久久五月天 | 狠狠干网址 | 97色在线视频 | 免费av福利 | 韩日精品在线观看 | 日韩在线观看视频在线 | 视频国产区| 天天爽综合网 | 精品欧美日韩 | 天天操天天干天天爽 | 97爱 | 日韩精品在线播放 | av成人免费 | 精品国产人成亚洲区 | 亚洲作爱| 欧美资源 | 欧美激情精品久久久 | 欧日韩在线视频 | 婷婷在线网| 在线观看精品国产 | 色网站在线观看 | 成年人黄色免费网站 | 天天操天天操天天操天天操 | 国产精品成人在线观看 | 最新国产在线 | 亚洲有 在线 | 久草久热 | 久久久久国产一区二区三区四区 | 亚洲电影网站 | 国产在线观看二区 | 在线不卡视频 | 97超碰色 | 日本三级中文字幕在线观看 | 国产日产精品久久久久快鸭 | 一区二区影视 | 久久激情视频 久久 | 深夜免费福利在线 | 国产在线观看,日本 | 婷婷丁香七月 | 91桃色在线免费观看 | 亚洲91精品| 成人在线视频观看 | 久爱综合 | 亚洲五月综合 | 欧美黄污视频 | 日韩av片免费在线观看 | 精品99在线视频 | 免费观看一级一片 | 色综合久久精品 | 精品一区二区综合 | 美女网站视频色 | 九九热免费观看 | 黄色免费电影网站 | 草久视频在线 | 国产在线p | 日韩高清三区 | 在线观看一 | 国产91全国探花系列在线播放 | 成人国产精品入口 | 色偷偷网站视频 | 国内精品视频免费 | 国产精品久久久久久久久久新婚 | 狠狠操综合网 | 久草新在线 | 婷婷在线色 | 中文字幕在线视频免费播放 | 色91av| 国产区在线 | 国产一区 在线播放 | 色综合久久久久综合99 | www.玖玖玖 | 人人精品久久 | 在线观看激情av | 国产在线色站 | 91在线免费视频 | 在线播放一区二区三区 | 国内久久久久久 | 国产精品国产毛片 | 国产精品久久久久久999 | 国产在线国偷精品产拍免费yy | 91精彩视频在线观看 | 国产精品video爽爽爽爽 | 天天玩天天干 | 中文一区在线观看 | 日韩精品久久久久久久电影99爱 | 国产精品成人免费一区久久羞羞 | 国产精品成人国产乱 | 日日夜夜噜 | 超碰人人99 | 青青草视频精品 | 久久久香蕉视频 | 99re视频在线观看 | 91桃色免费观看 | 欧美成年网站 | 欧美日韩中文国产 | 色综合天天干 | 日韩成人精品在线观看 | 欧美日韩另类视频 | 丁香 久久 综合 | 91精品人成在线观看 | 日日夜夜天天干 | 国产亚洲亚洲 | 色妞色视频一区二区三区四区 | 日韩99热 | 热久久影视 | 亚洲日韩精品欧美一区二区 | 综合天堂av久久久久久久 | 亚洲婷婷在线 | 天天色天天干天天色 | 午夜视频99 | 国产精品女人久久久 | 日韩高清成人在线 | 免费高清看电视网站 | 日韩亚洲在线观看 | 福利一区二区三区四区 | 久久成人毛片 | 九九免费在线视频 | 日韩 在线观看 | 欧美在线视频免费 | 欧美另类交人妖 | 欧美aaa大片 | 黄色网www | 亚州免费视频 | 精品国产精品久久一区免费式 | 超碰人人射 | 国产精品成人av电影 | 九色91福利| 五月婷婷在线视频 | 国产成人福利在线观看 | 久久一区二区三区国产精品 | 日韩精品一区二区在线观看 | 亚洲欧美日韩国产精品一区午夜 | 免费91麻豆精品国产自产在线观看 | 色五月情 | 五月天亚洲综合小说网 | 国产香蕉在线 | 国产成人综合精品 | www.xxx.性狂虐 | 婷婷五综合 | 91精品国自产在线 | 天天干夜夜夜操天 | 国产91精品在线播放 | 国产露脸91国语对白 | 91麻豆精品国产自产在线游戏 | 日韩理论在线观看 | 天天操天天曰 | 国产亚洲精品美女久久 | 亚洲一区二区三区四区在线视频 | 4438全国亚洲精品观看视频 | 中文字幕一区二区三区久久 | 草莓视频在线观看免费观看 | 日韩欧美精品在线观看视频 | 99亚洲精品视频 | 国产97在线观看 | 日韩com| 国产精品自产拍在线观看中文 | 亚洲九九九在线观看 | 中文字幕亚洲欧美 | 免费在线观看的av网站 | 国产精品99久久久久久武松影视 | 久久夜夜爽 | 日韩中文字幕在线不卡 | 久久曰视频 | 久久综合九色综合久久久精品综合 | 丁香影院在线 | 中文字幕免费一区二区 | 韩国av一区二区三区 | 日韩精品一区二区在线视频 | 国产69精品久久久久9999apgf | 日本中文字幕影院 | 九九视频精品在线 | 亚洲国产精品一区二区久久hs | 久久99久久99精品免视看婷婷 | 国产精品久久久久久久久久白浆 | 少妇高潮冒白浆 | 四虎影视成人永久免费观看亚洲欧美 | 国产亚洲一级高清 | 精品久久久影院 | 天天操夜夜干 | 日韩欧美国产视频 | 精品国产亚洲在线 | 天天操天天草 | 波多野结衣在线观看一区二区三区 | 欧美伦理电影一区二区 | 五月婷婷中文字幕 | 四虎最新域名 | 精品一区二区三区久久 | 日韩经典一区二区三区 | 久久黄视频| 久久精品中文字幕 | 国产a网站 | 精品成人久久 | 人人干人人做 | 精品在线不卡 | 日韩动漫免费观看高清完整版在线观看 | 黄色毛片视频免费观看中文 | 一区二区三区四区精品视频 | 免费观看91 | 久久影视一区二区 | 国产三级精品在线 | 午夜精品一区二区三区免费视频 | 亚洲人成在线观看 | 精品色999 | 人人艹人人 | 香蕉影院在线播放 | 成人免费视频观看 | a天堂在线看 | 一区二精品 | 成人国产一区 | 97超级碰 | 超碰精品在线观看 | 国产成人精品av在线观 | 久久66热这里只有精品 | av黄免费看 | 国产精品久久久免费 | 亚洲精品国产综合久久 | 久久亚洲国产精品 | 亚洲午夜av电影 | 国产精品女同一区二区三区久久夜 | 午夜视频在线观看一区 | 日韩在线短视频 | 丁香花五月 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产一级在线 | 欧美精品视 | 在线视频欧美精品 | 国产视频久久久 |