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

消息隊(duì)列 RocketMQ 入門指南

開發(fā)
本文我們將從RocketMQ的基本概念出發(fā),逐步講解其核心功能,并通過簡單的實(shí)踐示例,幫助你快速上手。

在當(dāng)今的分布式系統(tǒng)中,消息隊(duì)列(Message Queue)作為解耦、異步通信和流量削峰的重要組件,扮演著不可或缺的角色。而RocketMQ,作為阿里巴巴開源的一款高性能、高可靠的分布式消息中間件,憑借其強(qiáng)大的功能和穩(wěn)定的性能,成為了眾多開發(fā)者和企業(yè)的首選。

無論你是剛剛接觸消息隊(duì)列的新手,還是希望深入了解RocketMQ的開發(fā)者,這篇文章都將為你提供一個(gè)清晰的入門指南。我們將從RocketMQ的基本概念出發(fā),逐步講解其核心功能,并通過簡單的實(shí)踐示例,幫助你快速上手。

一、詳解RocketMQ基礎(chǔ)概念

1. 為什么要用RocketMQ

相比于市場上的各種消息隊(duì)列,它有如下優(yōu)勢(shì):

  • 性能好。
  • 穩(wěn)定可靠。
  • 中文社區(qū)活躍。

當(dāng)然缺點(diǎn)也是有那么一些些的,兼容性確實(shí)不太行。

2. RocketMQ優(yōu)缺點(diǎn)是什么

優(yōu)點(diǎn):

  • 單機(jī)吞吐量為10w級(jí)。
  • 可用性很高,支持分布式架構(gòu)。
  • 擴(kuò)展性好。
  • 支持10億級(jí)別的消息堆積,而且不會(huì)因?yàn)槎逊e導(dǎo)致性能下降。
  • 源碼是用Java寫的,對(duì)于Java程序員來說非常方便改造。
  • 參數(shù)優(yōu)化配置,消息基本可以做到0丟失。
  • 使用于對(duì)可靠性要求高的金融行業(yè)。

缺點(diǎn):

  • 目前只支持Java、C++客戶端,而且C++還不算完善。
  • 沒有在MQ核心實(shí)現(xiàn)JMS相關(guān)接口,有些遷移改造就比較麻煩了。

3. 消息隊(duì)列使用場景

解耦: 例如用戶完成下單除了必要的庫存扣減和訂單狀態(tài)更新外,我們還需要處理一些積分系統(tǒng)、推送系統(tǒng)的無關(guān)緊要的業(yè)務(wù)處理,如果全部順序執(zhí)行,等待時(shí)間就會(huì)變得很漫長,所以我們需要借助MQ將邊角業(yè)務(wù)從業(yè)務(wù)模塊中解耦開來。

  • 異步: 這點(diǎn)不必多說,上述的解耦方案就會(huì)使得積分系統(tǒng)、促銷系統(tǒng)、推送系統(tǒng)任務(wù)異步執(zhí)行。
  • 削峰: 可以理解為一個(gè)漏斗,例如我們的某個(gè)服務(wù)只能抗住10wQPS,可是當(dāng)前請(qǐng)求卻達(dá)到20w的QPS,那么我們就可以將請(qǐng)求全部先扔到MQ中,讓服務(wù)慢慢消化處理。

二、RocketMQ基礎(chǔ)安裝與實(shí)踐

1. 安裝并啟動(dòng)RocketMQ

在編寫業(yè)務(wù)代碼之前,我們必須完成一下RocketMQ的部署,首先我們自然要下載一下RocketMQ,下載地址如下,筆者下載的是rocketmq-all-4.8.0-bin-release這個(gè)版本:https://rocketmq.apache.org/download/

完成完成后,我們將其解壓到自定義的路徑,鍵入sudo vim /etc/profile配置MQ環(huán)境變量,完成后鍵入source /etc/profile使之生效,對(duì)應(yīng)的配置內(nèi)容如下所示:

export ROCKETMQ_HOME=/home/sharkchili/rocketmq-all-4.8.0-bin-release
export PATH=$PATH:$ROCKETMQ_HOME/bin

需要注意的是筆者本次采用WSL的Ubuntu子系統(tǒng)時(shí)啟動(dòng)時(shí)腳本會(huì)拋出runserver.sh: 70: [[: Exec format error錯(cuò)誤,嘗試格式化和指令配置后都沒有很好的解決,于是循著報(bào)錯(cuò)找到runserver.sh這行對(duì)應(yīng)的腳本內(nèi)容,該括弧本質(zhì)上就是基于JDK內(nèi)容配置對(duì)應(yīng)的GC算法:

以筆者為里系統(tǒng)是jdk8,所以直接去掉判斷用走JDK8的配置即可:

choose_gc_options()
{

      JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFractinotallow=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
      JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails"
      JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
 
}

完成后鍵入./mqnamesrv &將MQ啟動(dòng),如果彈窗輸出下面這條結(jié)果,則說明mq的NameServer啟動(dòng)成功。

Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON

然后我們?cè)冁I入./mqbroker -n 127.0.0.1:9876啟動(dòng)broker,需要注意的是默認(rèn)情況下broker占用堆內(nèi)存差不多是4g,所以讀者本地部署時(shí)建議修改一下runbroker.sh的堆內(nèi)存,如下圖所示:

若彈窗輸出下面所示的文字,則說明broker啟動(dòng)成功,自此mq就在windows環(huán)境部署成功了。我們就可以開始編碼工作了。

The broker[DESKTOP-BI4ATFQ, 192.168.237.1:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876

2. 訂單系統(tǒng)改造

本次的示例是關(guān)于訂單系統(tǒng)改造,用戶下單完成后,服務(wù)器需要進(jìn)行庫存扣減、訂單狀態(tài)更新、以及優(yōu)惠券、積分等邊邊角角的業(yè)務(wù),如果順序執(zhí)行這些邏輯+網(wǎng)絡(luò)開銷,接口耗時(shí)對(duì)于用戶體驗(yàn)是非常不友好的。

所以我們?cè)趯⒎呛诵臉I(yè)務(wù)邏輯從接口串行調(diào)用中抽出,下單業(yè)務(wù)只需關(guān)注完成我們庫存扣減、訂單狀態(tài)更新就行了,剩下的業(yè)務(wù)用MQ發(fā)個(gè)消息給積分系統(tǒng)、促銷系統(tǒng)告知他們自己處理一下就行了:

首先我們引入MQ依賴腳手架:

<dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

同時(shí)這里我們也給出配置信息:

# mq地址端口
rocketmq.name-server=127.0.0.1:9876
# 生產(chǎn)者配置
rocketmq.producer.isOnOff=on
# 發(fā)送同一類消息設(shè)置為同一個(gè)group,保證唯一
rocketmq.producer.group=rocketmq-group
rocketmq.producer.groupName=rocketmq-group
# namesrv地址
rocketmq.producer.namesrvAddr=127.0.0.1:9876
# 設(shè)置消息最大長度 4M
rocketmq.producer.maxMessageSize=4096
# 消息發(fā)送超時(shí)時(shí)間
rocketmq.producer.sendMsgTimeout=3000
# 消息發(fā)送失敗重試次數(shù)
rocketmq.producer.retryTimesWhenSendFailed=2

隨后我們?cè)O(shè)置監(jiān)聽處理關(guān)于訂單創(chuàng)建的topic消息:

@Component
@RocketMQMessageListener(consumerGroup = "${rocketmq.producer.groupName}", topic = "ORDER_ADD")
@Slf4j
public class OrderMsgListener implements RocketMQListener<Order> {
    @Override
    public void onMessage(Order order) {
        log.info("收到訂單,訂單信息:[{}],進(jìn)行積分系統(tǒng)、促銷系統(tǒng)、推送系統(tǒng)業(yè)務(wù)處理.....", JSONUtil.toJsonStr(order));
    }
}

完成后我們基于CommandLineRunner 測試一下消息發(fā)送:

@Component
@Slf4j
public class MQTest implements CommandLineRunner {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;


    @Override
    public void run(String... args) throws Exception {

        Order order = new Order();
        order.setOrderNo("20221217001002003");
        order.setUserId(1);
        order.setPrice(500.00);

        rocketMQTemplate.asyncSend("ORDER_ADD", MessageBuilder.withPayload(order).build(), getDefaultSendCallBack());

    }

    /**
     * 消息處理默認(rèn)回調(diào)
     * @return
     */
    private SendCallback getDefaultSendCallBack() {
        return new SendCallback() {

            @Override
            public void onSuccess(org.apache.rocketmq.client.producer.SendResult sendResult) {
                log.info("MQ消息發(fā)送成功。result:{}", JSONUtil.toJsonStr(sendResult));
            }

            @Override
            public void onException(Throwable throwable) {
                log.error("MQ消息發(fā)送失敗,失敗原因:{}" + throwable.getMessage());
            }
        };
    }

}

日志如下,可以看到消息消費(fèi)成功了:

2025-02-11 10:03:14.577  INFO 14420 --- [MessageThread_1] com.sharkChili.config.OrderMsgListener   : 收到訂單,訂單信息:[{"userId":1,"orderNo":"20221217001002003","price":500}],進(jìn)行積分系統(tǒng)、促銷系統(tǒng)、推送系統(tǒng)業(yè)務(wù)處理.....
2025-02-11 10:03:14.577  INFO 14420 --- [ublicExecutor_2] com.sharkChili.runner.MQTest             : MQ消息發(fā)送成功。result:{"sendStatus":"SEND_OK","msgId":"AC1E1001385418B4AAC235A7E0190000","messageQueue":{"topic":"ORDER_ADD","brokerName":"DESKTOP-DC9PSUS","queueId":2},"queueOffset":1,"offsetMsgId":"AC15733800002A9F0000000000000558","regionId":"DefaultRegion","traceOn":true}

3. 如何實(shí)現(xiàn)消息過濾

設(shè)置tag消息的方式常見的是有兩種,一種是基于tag標(biāo)簽過濾,如下代碼所示,我們希望發(fā)送訂單業(yè)務(wù)即ORDER_ADD這個(gè)主題下tag標(biāo)簽為tagA的用戶收到消息,那么我們就可以通過ORDER_ADD:tagA針對(duì)topic進(jìn)行更進(jìn)一步劃分:

//創(chuàng)建訂單消息
        Order order = new Order();
        order.setUserId(1);
        order.setOrderNo(UUID.randomUUID().toString());
        order.setPrice(500);
        //生成消息
        Message<Order> message = MessageBuilder.withPayload(order)
                .build();
        //同步發(fā)送
        rocketMQTemplate.syncSend("ORDER_ADD:tagA", message);

對(duì)應(yīng)的監(jiān)聽者通過selectorExpression 指定標(biāo)簽即可:

@Component
@RocketMQMessageListener(consumerGroup = "${rocketmq.producer.groupName}",
        topic = "ORDER_ADD",
        selectorExpression = "tagA"http://訂閱tagA的消息
)
@Slf4j
public class OrderMsgListener implements RocketMQListener<Order> {
    @Override
    public void onMessage(Order order) {
        log.info("收到訂單,訂單信息:[{}],進(jìn)行積分系統(tǒng)、促銷系統(tǒng)、推送系統(tǒng)業(yè)務(wù)處理.....", JSONUtil.toJsonStr(order));
    }
}

還有一種就是基于SQL過濾,因?yàn)楸磉_(dá)式靈活,相對(duì)更強(qiáng)大一些,例如我們的消費(fèi)者只處理userId為10以內(nèi)的數(shù)據(jù),那么消費(fèi)者的監(jiān)聽就可以按照如下姿勢(shì)進(jìn)行配置:

@Component
@RocketMQMessageListener(consumerGroup = "${rocketmq.producer.groupName}",
        topic = "ORDER_ADD",
        selectorType = SelectorType.SQL92,//指令類型為sql表達(dá)式
        selectorExpression = "userId<10"http://過濾出id小于10的用戶的訂單
)
@Slf4j
public class OrderMsgListener implements RocketMQListener<Order> {
    @Override
    public void onMessage(Order order) {
        log.info("收到訂單,訂單信息:[{}],進(jìn)行積分系統(tǒng)、促銷系統(tǒng)、推送系統(tǒng)業(yè)務(wù)處理.....", JSONUtil.toJsonStr(order));
    }
}

發(fā)送消息時(shí),通過headers 指定本消息條件并通過convertAndSend發(fā)送即可:

//創(chuàng)建訂單消息
        Order order = new Order();
        order.setUserId(1);
        order.setOrderNo(UUID.randomUUID().toString());
        order.setPrice(500);
        //通過header攜帶條件告知當(dāng)前userId為1
        Map<String, Object> headers = new HashMap<>();
        headers.put("userId", 1);
        //生成消息
        Message<Order> message = MessageBuilder.withPayload(order)
                .build();
        //發(fā)送
        rocketMQTemplate.convertAndSend("ORDER_ADD", message, headers);

需要注意的是默認(rèn)情況下,MQ是不支持SQL表達(dá)過濾,我們需要到conf目錄下的broker.conf文件,添加enablePropertyFilter=true,然后鍵入如下指令降broker啟動(dòng):

./mqbroker -n 127.0.0.1:9876 autoCreateTopicEnable=true -c ../conf/broker.conf

4. 如何提交延時(shí)消息

延遲消息即需要消費(fèi)者過一段時(shí)間后才能消費(fèi)的消息,例如我們現(xiàn)在有個(gè)消息要求消費(fèi)者10s后才能消費(fèi),那么我們就可以使用延遲消息,如下代碼所示:

// 創(chuàng)建延遲消息
        Message<String> rocketMessage = MessageBuilder.withPayload("this is delay msg").build();
        // 發(fā)送延遲消息,timeout設(shè)置為10000即10s,delayLevel表示延遲等級(jí),1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h,所以 3為10s
        rocketMQTemplate.syncSend("delay_topic", rocketMessage, 10000,3);
        log.info("延遲消息發(fā)送完成");

消費(fèi)者代碼:

@Component
@RocketMQMessageListener(consumerGroup = "delay_msg_group", topic = "delay_topic")
@Slf4j
public class DelayMsgListener implements RocketMQListener<String> {
    @Override
    public void onMessage(String msg) {
        log.info("收到延遲消息,消息內(nèi)容:{}", JSONUtil.toJsonStr(msg));
    }
}

輸出結(jié)果,可以看到確實(shí)是10s后消費(fèi)者采納看到消息并消費(fèi):

2025-02-11 10:56:58.300  INFO 18568 --- [           main] com.sharkChili.runner.MQTest             : 延遲消息發(fā)送完成
2025-02-11 10:57:08.307  INFO 18568 --- [MessageThread_1] com.sharkChili.config.DelayMsgListener   : 收到延遲消息,消息內(nèi)容:this is delay msg
責(zé)任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關(guān)推薦

2025-10-09 07:30:00

Kafka開發(fā)代碼

2022-09-21 21:50:18

Dapr消息隊(duì)列

2017-07-11 15:26:57

LocalMQ RocketMQ高性能

2024-10-08 08:52:59

2017-10-11 15:08:28

消息隊(duì)列常見

2024-10-29 08:34:27

RocketMQ消息類型事務(wù)消息

2024-11-11 13:28:11

RocketMQ消息類型FIFO

2025-06-04 01:35:00

RocketMQ異步消息

2022-12-22 10:03:18

消息集成

2023-09-18 08:27:20

RabbitMQRocketMQKafka

2022-06-02 08:21:07

RocketMQ消息中間件

2023-07-18 09:03:01

RocketMQ場景消息

2023-07-17 08:34:03

RocketMQ消息初體驗(yàn)

2022-03-31 08:26:44

RocketMQ消息排查

2023-12-21 08:01:41

RocketMQ消息堆積

2023-08-17 10:20:18

RabbitMQ系統(tǒng)

2023-11-20 09:33:43

開發(fā)指南

2024-09-13 08:49:45

2021-04-07 08:43:09

SpringBootRocketMQ開發(fā)技術(shù)

2020-11-13 16:40:05

RocketMQ延遲消息架構(gòu)
點(diǎn)贊
收藏

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

亚洲黄色免费网站| 中文字幕一区二区三区在线视频 | 日韩欧美成人网| 欧美日韩在线精品| 国产一区二区自拍视频| 在线国产一区| 精品视频在线观看日韩| 日韩精品 欧美| 91精品国产91久久久久游泳池| 免费高清在线一区| 欧美黄色成人网| 黄色免费视频网站| 91综合国产| 亚洲一区电影777| 日韩免费av一区二区三区| 99久久99久久久精品棕色圆| 国产精品试看| 欧美大肥婆大肥bbbbb| 日本黄色网址大全| 精品午夜av| 色老汉av一区二区三区| 黄色污污在线观看| 九色国产在线观看| 日本综合久久| 亚洲另类一区二区| 欧美亚州在线观看| 午夜精品在线播放| 奇米一区二区三区av| 欧美大片第1页| 五月婷婷婷婷婷| 欧美激情99| 日韩女同互慰一区二区| 国产激情在线观看视频| 欧美xxxx黑人又粗又长| 国产精品进线69影院| 久久综合入口| 日本人妻丰满熟妇久久久久久| 看国产成人h片视频| 欧洲成人性视频| 国产在线视频99| 亚洲91视频| 中文字幕国产亚洲2019| 精品中文字幕在线播放| 亚洲精品一区国产| 在线不卡的av| 伊人影院综合在线| 成人免费黄色| 欧洲色大大久久| 日韩精品无码一区二区三区免费 | 久久久免费电影| 天堂av免费在线| 日韩1区2区| 在线视频欧美日韩| 国内精品卡一卡二卡三| 九九久久婷婷| 亚洲天堂精品在线| 欧美黄色一级生活片| 亚洲国产最新| 亚洲乱亚洲乱妇无码| 欧美熟妇精品黑人巨大一二三区| 国产精品sss在线观看av| 日韩欧美久久久| 国产成人精品一区二区在线小狼 | 欧美日韩美女一区二区| 91蝌蚪视频在线观看| 伊伊综合在线| 91福利区一区二区三区| 91香蕉视频导航| 日本免费一区二区三区等视频| 欧美亚洲高清一区| 亚欧激情乱码久久久久久久久| 欧美天堂一区| 欧美精品日韩一区| 91视频福利网| 98视频精品全部国产| 亚洲成人在线网| 成人无码www在线看免费| 免费观看成人www动漫视频| 亚洲国产成人一区| 中文字幕在线看高清电影| 精品日本12videosex| 视频在线一区二区| 欧美黄片一区二区三区| 91久久在线| 国产成人精品在线观看| 亚洲一卡二卡在线观看| 国产激情一区二区三区四区 | 欧美国产日产韩国视频| jizz国产免费| 日韩精品视频网站| 91精品在线看| 天天干天天干天天干| 久久综合久久鬼色| 伊人久久大香线蕉成人综合网| 成人午夜在线影视| 99久久精品免费观看| 欧美国产综合视频| 免费a级在线播放| 亚洲第一综合色| 91香蕉视频导航| 成人线上播放| 正在播放亚洲1区| 久久久久成人精品无码| 亚洲综合好骚| 亚洲自拍偷拍色图| 麻豆影视在线| 亚洲综合丁香婷婷六月香| 黄色一级一级片| 亚洲成人偷拍| 中文字幕亚洲一区| 国产精品suv一区二区三区| 欧美a一区二区| 国产美女精品在线观看| 午夜视频在线观看网站| 亚洲成av人片在线观看| 亚洲这里只有精品| 欧美综合精品| 久久6精品影院| 中文字幕乱码无码人妻系列蜜桃| 国产激情视频一区二区在线观看| 日韩精品最新在线观看| 91福利区在线观看| 欧美一级高清大全免费观看| 亚洲永久精品ww.7491进入| 欧美日韩亚洲一区| 成人精品网站在线观看| 国产一区二区三区福利| 亚洲一区精品在线| 日韩欧美理论片| 欧美日韩国产传媒| 欧美亚洲国产精品| 高清毛片aaaaaaaaa片| 中文字幕制服丝袜成人av| 欧美视频免费播放| 欧洲精品一区| 欧美激情在线一区| 国产夫妻自拍av| 中文字幕亚洲不卡| www.涩涩涩| 国产欧美日韩免费观看 | 激情网站在线| 欧美一区二区三区视频免费| 日韩女同一区二区三区| 午夜在线一区二区| 精品一区久久| 国产欧洲在线| 亚洲娇小xxxx欧美娇小| 久久久久久久久97| 国产v日产∨综合v精品视频| gogogo免费高清日本写真| 国产精品黄色片| 在线观看成人黄色| 中文字幕乱码一区二区| 久久久久久久久蜜桃| 黄www在线观看| 夜夜躁狠狠躁日日躁2021日韩| 欧美一区深夜视频| 日韩porn| 日本精品一级二级| 在线 丝袜 欧美 日韩 制服| 亚洲免费影视| 日本成人三级| 国产a亚洲精品| 久久精品91久久久久久再现| 国产又粗又黄又爽视频| 亚洲欧美日韩国产综合在线| www.久久久久久久久久久| 99精品电影| 97在线资源站| av在线播放资源| 国产视频精品xxxx| 日韩精选在线观看| 中文字幕一区二区三区蜜月| www.桃色.com| 亚洲激情午夜| 欧美中日韩免费视频| 日韩欧美精品一区二区综合视频| 国产亚洲精品va在线观看| 最近中文字幕免费在线观看| 中文字幕亚洲电影| 黄色av电影网站| 久久青草久久| 中国成人亚色综合网站| 日韩中文一区二区| 91精品国产色综合久久不卡98| 色猫av在线| 欧美精品黑人性xxxx| 欧美日韩三级在线观看| 91在线观看视频| 中文字幕网av| 亚洲先锋成人| 日本精品一区二区| 奇米一区二区| 日本sm极度另类视频| 尤物网在线观看| 精品对白一区国产伦| 啦啦啦免费高清视频在线观看| 亚洲国产精品二十页| 日本少妇一区二区三区| 一区二区国产在线观看| 亚洲制服欧美久久| 成人自拍在线| 国产欧美精品在线| sm在线播放| 久久精品成人动漫| 午夜av免费在线观看| 欧美人牲a欧美精品| 国产精品1000| 最好看的中文字幕久久| 国产又黄又粗又猛又爽的视频| 久久www免费人成看片高清| 亚洲人成无码网站久久99热国产| 成人高清电影网站| 国产一区不卡在线观看| **国产精品| 国产成人啪精品视频免费网| 青草视频在线免费直播| 中文字幕日本欧美| 午夜在线观看视频18| 51精品国自产在线| 香蕉污视频在线观看| 亚洲香肠在线观看| 艳妇荡乳欲伦69影片| 国产亚洲欧洲997久久综合| 日本中文字幕精品| 久久成人久久爱| 五月婷婷之综合激情| 在线综合亚洲| 国内少妇毛片视频| 亚洲精品二区三区| 亚洲一区三区电影在线观看| 夜夜春成人影院| 精品不卡在线| 9l视频自拍九色9l视频成人| 91久久精品视频| 久久久加勒比| 国产精品久久久久久网站| 成人性生交大片免费观看网站| 欧美黄色成人网| 青春草免费在线视频| 久久91精品国产91久久久| 日韩伦理在线观看| 中文字幕日韩精品在线| 久草在线青青草| 亚洲欧美一区二区三区在线| 色丁香婷婷综合久久| 精品日韩在线观看| 国产高清视频免费| 欧美大片在线观看一区二区| av无码精品一区二区三区宅噜噜| 欧美日韩成人综合| 亚洲一卡二卡在线观看| 69av一区二区三区| 国产精品无码一区二区桃花视频 | 国产精品嫩草久久久久| 欧美做受高潮6| 国产视频一区二区在线观看| 91网站免费入口| 欧美精彩视频一区二区三区| 蜜桃久久精品成人无码av| 国产欧美日韩亚州综合| 日本美女xxx| 国产精品高潮久久久久无| 91成人精品一区二区| 国产精品美女久久久久久久久 | 亚洲美女在线国产| 免费在线观看a级片| 亚洲视频图片小说| 欧美成人三级视频| 午夜精品123| 中文字幕亚洲乱码熟女1区2区| 色中色一区二区| 最新黄色网址在线观看| 欧美日韩精品一区二区三区| 国产女人高潮时对白| 精品久久久三级丝袜| 污视频在线免费| 亚洲四色影视在线观看| 色三级在线观看| 欧美激情精品久久久久久免费印度| 波多野在线观看| 国产mv免费观看入口亚洲| av成人在线看| 成人18视频| 亚洲图片久久| 99精品视频网站| 精品二区久久| 能在线观看的av网站| 韩日精品视频一区| 国产真实乱人偷精品| 国产午夜精品一区二区三区视频| 韩国一级黄色录像| 亚洲va国产va欧美va观看| 波多野结衣视频免费观看| 4hu四虎永久在线影院成人| 亚洲高清视频网站| 亚洲人在线视频| 在线中文免费视频| 茄子视频成人在线| 麻豆精品久久| 欧美日韩一区在线播放| 国产精品二区不卡| 成人在线免费在线观看| 激情亚洲综合在线| 男女黄床上色视频| 亚洲免费大片在线观看| 女人十八岁毛片| 欧美一区二区精品久久911| 亚洲欧洲国产综合| 成人444kkkk在线观看| 一本大道色婷婷在线| 亚洲jizzjizz日本少妇| 国产探花一区| 国产免费黄色小视频| 久久超级碰视频| 成年人免费观看视频网站 | 亚洲欧美精品中文字幕在线| 国产传媒在线播放| 国产精品久久久久久av下载红粉| 北条麻妃在线一区二区免费播放| 亚洲图片欧洲图片日韩av| 在线亚洲成人| 精品1卡二卡三卡四卡老狼| 中文字幕日韩一区| 中文亚洲av片在线观看| 日韩av一区在线观看| 色图在线观看| 91久久精品一区| 久久亚洲国产| 日本熟妇人妻中出| 91蝌蚪porny九色| 日韩免费黄色片| 欧美精品一区二| 91精品久久久| 亚洲综合精品一区二区| 日韩dvd碟片| 妓院一钑片免看黄大片| 久久精品水蜜桃av综合天堂| 成人午夜视频精品一区| 欧美xxxxxxxxx| 久久五月精品中文字幕| 91传媒免费看| 欧美成熟视频| gogo亚洲国模私拍人体| 亚洲色图.com| 国产三级小视频| 成年无码av片在线| 精品一区二区三区免费看| 亚洲综合激情五月| 久久se精品一区二区| 男女全黄做爰文章| 欧美人狂配大交3d怪物一区| 淫片在线观看| 国产在线a不卡| 亚洲蜜桃视频| 99999精品| 亚洲资源中文字幕| 粉嫩av一区二区夜夜嗨| 久久男人资源视频| 欧美高清视频看片在线观看| 亚洲 高清 成人 动漫| 91理论电影在线观看| 中文字幕一区二区人妻电影| 亚洲欧美中文字幕| 成人全视频免费观看在线看| 亚洲自拍的二区三区| 国产一区二区三区美女| 久久高清无码视频| 亚洲国产欧美精品| 美脚恋feet久草欧美| 天堂一区二区三区| 久久电影网电视剧免费观看| 亚洲色图综合区| 精品国产一区二区三区av性色| 精品极品在线| 天堂av一区二区| 国精产品一区一区三区mba桃花 | 亚洲超丰满肉感bbw| 污污的视频网站在线观看| 国产精品久久不能| 久久久久亚洲| 好吊色视频一区二区三区| 色婷婷狠狠综合| 成人国产免费电影| 国产综合 伊人色| 免费在线观看精品| 69xx绿帽三人行| 国产婷婷97碰碰久久人人蜜臀| 成人全视频免费观看在线看| 日韩精品视频在线观看视频| 久久久久久免费| 97免费观看视频| 91精品国产高清久久久久久91 | 久久香蕉视频网站| 99re这里都是精品| 一级黄色大毛片| 97精品在线视频| 欧美国产一区二区三区激情无套| 精品人妻二区中文字幕| 91黄色免费版|