亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Spring Boot集成EMQX的MQTT重連機(jī)制深度解析

Spring Boot集成EMQX的MQTT重連機(jī)制深度解析 1. 項目概述當(dāng) Spring Boot 遇上 EMQX重連不是“自動續(xù)費”而是系統(tǒng)性工程MQTT 客戶端反復(fù)重連——這六個字在物聯(lián)網(wǎng)、工業(yè)監(jiān)控、智能硬件后臺開發(fā)中幾乎等同于“深夜告警電話響起”的前奏。我第一次在某能源監(jiān)測平臺上線后第三天凌晨兩點被叫醒就因為 Spring Boot 應(yīng)用連接 EMQX 后每 47 秒斷開、3 秒內(nèi)重連、再斷開……循環(huán)往復(fù)日志里堆滿Connection lost和Attempting reconnect而設(shè)備上報數(shù)據(jù)卻像被掐住喉嚨吞吐量跌到正常值的 12%。這不是配置沒點“重連開關(guān)”那么簡單也不是加個Scheduled手動 ping 就能糊弄過去的事。它背后是 TCP 連接生命周期、MQTT 協(xié)議會話狀態(tài)Clean Session / Session Expiry Interval、Spring Integration 的消息通道緩沖機(jī)制、EMQX 集群節(jié)點間會話同步延遲、以及 JVM 線程調(diào)度與 Netty EventLoop 綁定策略的多重交疊。你看到的是“反復(fù)重連”實際在跑的是一個跨協(xié)議棧、跨進(jìn)程、跨網(wǎng)絡(luò)層的隱式狀態(tài)機(jī)。這個項目標(biāo)題里的“踩坑實錄”不是修幾個 bug 的記錄而是把 Spring Boot EMQX 這套組合在生產(chǎn)環(huán)境里“按在地上摩擦”后重新拼出完整因果鏈的過程。適合正在用 Spring Boot 接入 MQTT 消息中間件的后端開發(fā)者、IoT 平臺架構(gòu)師以及那些剛在本地測試一切完美、一上預(yù)發(fā)就瘋狂重連、翻遍文檔卻找不到答案的中級工程師。核心關(guān)鍵詞就三個MQTT 客戶端重連機(jī)制、Spring Boot 集成 EMQX、EMQX 會話管理策略——它們不是并列關(guān)系而是層層嵌套的依賴重連行為由客戶端驅(qū)動但能否成功重建會話取決于 EMQX 是否還保留著你的 Session而 Spring Boot 的封裝層又悄悄屏蔽了底層 Netty ChannelInactive 事件與 MQTT CONNECT 報文重發(fā)之間的時序細(xì)節(jié)。接下來所有內(nèi)容都圍繞這三者的咬合縫隙展開。2. 整體設(shè)計思路拆解為什么“開重連”反而讓系統(tǒng)更脆弱2.1 不是所有重連都叫“可靠重連”很多開發(fā)者拿到需求第一反應(yīng)是“MQTT 客戶端自帶重連配個reconnectAttempts10不就完了”——這是最典型的認(rèn)知偏差。EMQX 官方文檔里明確寫著“客戶端重連Reconnect僅保證 TCP 層連接恢復(fù)不保證 MQTT 會話Session延續(xù)?!?這句話的潛臺詞是如果你的客戶端設(shè)置了cleanSession trueSpring Boot 默認(rèn)就是 true那么每次重連EMQX 都會當(dāng)作一個全新客戶端處理丟棄所有未確認(rèn)的 QoS1/2 消息、清空訂閱列表、重置遺囑消息Will Message。結(jié)果就是你花了 2 秒連上卻發(fā)現(xiàn)之前設(shè)備發(fā)來的 5 條報警消息全丟了還得手動去數(shù)據(jù)庫查歷史記錄補(bǔ)漏。我們當(dāng)時線上問題的根因之一就是誤以為“連上了消息通了”實際是“連上了從零開始”。提示Spring Boot Starter for MQTT如spring-integration-mqtt默認(rèn)創(chuàng)建的MqttPahoClientFactory實例其cleanSession屬性為true且無顯式配置入口。你必須通過自定義MqttConnectOptionsBean 手動覆蓋。2.2 EMQX 的“會話保鮮”機(jī)制才是關(guān)鍵勝負(fù)手EMQX 不是被動等待客戶端重連的“接線員”它有一套主動的會話保鮮Session Keep-alive策略。關(guān)鍵參數(shù)有兩個session_expiry_interval會話過期時間和max_clientid_len客戶端 ID 長度限制。前者決定了 EMQX 在客戶端斷開后最多保留該會話多長時間后者則直接影響你能否使用帶時間戳或隨機(jī)后綴的動態(tài) Client ID比如client-20240520-abc123。我們踩的第一個深坑就是用了 UUID 生成的 Client ID36 字符而 EMQX 集群配置的max_clientid_len 23。結(jié)果是客戶端首次連接成功但重連時 EMQX 認(rèn)為 Client ID 非法直接拒絕連接觸發(fā)客戶端無限退避重試exponential backoff日志里卻只顯示Connection refused根本看不到 Client ID 被截斷的提示。后來查 EMQX 的emqx.log才發(fā)現(xiàn)一行invalid clientid length: 36 23。這說明重連失敗的表象90% 源于服務(wù)端策略與客戶端配置的隱式不匹配而非網(wǎng)絡(luò)抖動。2.3 Spring Boot 的“自動裝配”埋下了時序陷阱Spring Boot 的便利性在這里成了雙刃劍。當(dāng)你引入spring-boot-starter-integration并配置spring.mqtt.*屬性時框架會自動創(chuàng)建MqttMessageDrivenChannelAdapter和MqttPahoClientFactory。但問題在于這個 Adapter 的啟動時機(jī)是在 Spring Context 刷新完成之后而 EMQX 集群的節(jié)點發(fā)現(xiàn)、會話同步可能需要 200~500ms。我們曾遇到一種情況應(yīng)用啟動瞬間Adapter 就向 EMQX 發(fā)送 CONNECT此時 EMQX 主節(jié)點還沒完成集群狀態(tài)同步返回CONACK時攜帶的session present false導(dǎo)致客戶端誤判“會話不存在”進(jìn)而清空本地緩存的訂閱主題。后續(xù)即使網(wǎng)絡(luò)穩(wěn)定也得靠定時任務(wù)重新 subscribe——而這個定時任務(wù)的間隔我們最初設(shè)為 30 秒意味著最長 30 秒內(nèi)新主題消息完全丟失。解決方案不是調(diào)小間隔而是讓 Adapter 的啟動等待 EMQX 集群 Ready 信號。我們最終在ApplicationRunner中加入對 EMQX/statusHTTP API 的健康檢查直到返回status: running才觸發(fā)channelAdapter.start()。2.4 真正的“高可用”設(shè)計客戶端 服務(wù)端 網(wǎng)絡(luò)層的三層協(xié)同把重連問題當(dāng)成客戶端單點問題來解決注定失敗。我們最終落地的方案是三層防御客戶端層禁用cleanSession啟用sessionExpiryInterval8640024 小時Client ID 固定如springboot-app-prod-v1重連策略改為固定間隔非指數(shù)退避避免雪崩式重連沖擊 EMQX服務(wù)端層EMQX 配置zone.external.max_clientid_len 64zone.external.session_expiry_interval 86400并開啟mqtt.allow_anonymous false強(qiáng)制認(rèn)證杜絕非法 Client ID 沖突網(wǎng)絡(luò)層在 Kubernetes Ingress 層配置proxy_read_timeout: 3005 分鐘防止 Nginx 等反向代理因空閑超時主動斷開長連接同時要求運維團(tuán)隊關(guān)閉交換機(jī)端口的TCP keepalive探測默認(rèn) 2 小時改用 EMQX 自身的keepalive機(jī)制默認(rèn) 60 秒避免中間設(shè)備靜默斷連。這三層不是獨立配置而是環(huán)環(huán)相扣客戶端的keepalive60必須小于 EMQX 的zone.external.keepalive_max 120否則 EMQX 會強(qiáng)制斷開而 EMQX 的session_expiry_interval又必須大于客戶端重連最大間隔我們設(shè)為 120 秒否則重連時會話已過期。這種參數(shù)間的數(shù)學(xué)約束才是“反復(fù)重連”問題的本質(zhì)。3. 核心細(xì)節(jié)解析與實操要點從日志里挖出真相的 7 個關(guān)鍵線索3.1 日志是唯一真相源必須開啟的 4 類日志級別別信控制臺打印的Connected to broker那只是 Spring Boot 的樂觀假設(shè)。真正的連接狀態(tài)藏在四類日志里EMQX 服務(wù)端日志log/emqx.log搜索client_connected、client_disconnected、session_dropped。我們曾發(fā)現(xiàn)一條session_dropped, reason: session_expired直接定位到session_expiry_interval配置過短客戶端 Netty 日志添加-Dio.netty.logger.levelDEBUG關(guān)注ChannelActive、ChannelInactive、exceptionCaught。當(dāng)出現(xiàn)java.io.IOException: Connection reset by peer說明是 TCP 層被中間設(shè)備防火墻/負(fù)載均衡強(qiáng)制中斷Paho 客戶端日志設(shè)置MqttConnectOptions.setLogEnabled(true)輸出MQTT CONNECT、CONNACK報文詳情特別是CONNACK中的returnCode0成功1~5各種拒絕原因和sessionPresent字段值Spring Integration 日志logging.level.org.springframework.integrationDEBUG追蹤MqttMessageDrivenChannelAdapter的start()、stop()、onConnectionLost()調(diào)用鏈確認(rèn)是否因異常被反復(fù) stop/start。注意生產(chǎn)環(huán)境切勿長期開啟 DEBUG 級別日志但排查重連問題時必須臨時開啟并定向輸出到獨立文件如mqtt-debug.log否則海量 INFO 日志會淹沒關(guān)鍵線索。3.2 Client ID 設(shè)計固定、唯一、可追溯的黃金三角Client ID 不是隨便起個名字就行。我們吃過虧的三種錯誤模式UUID 模式client-uuid4()每次啟動 ID 不同cleanSessionfalse下EMQX 會為每個 ID 創(chuàng)建獨立會話內(nèi)存暴漲集群同步延遲加劇主機(jī)名進(jìn)程號模式host123-45678K8s 環(huán)境下 Pod 重啟后 IP 和進(jìn)程號全變ID 失效時間戳模式app-202405201430同一秒內(nèi)多個實例啟動ID 沖突。最終采用“環(huán)境服務(wù)名版本哈希”四段式prod-springboot-mqtt-v1.2.3-7a8b9c。其中哈希取自 Git Commit SHA 前 6 位確保構(gòu)建產(chǎn)物唯一環(huán)境和服務(wù)名硬編碼版本號來自MANIFEST.MF。這樣既保證全局唯一又具備可追溯性——看到 Client ID 就知道是哪個環(huán)境、哪個版本、哪次構(gòu)建。更重要的是EMQX 的session存儲以 Client ID 為 Key固定 ID 讓會話復(fù)用率從 30% 提升至 99.7%。3.3 Clean Session 與 Session Expiry Interval 的數(shù)學(xué)關(guān)系這是最容易被忽略的公式sessionExpiryInterval ≥ (最大重連間隔 × 重連嘗試次數(shù)) 網(wǎng)絡(luò)抖動余量我們最初設(shè)sessionExpiryInterval3005 分鐘重連策略為initialDelay1000ms, maxDelay10000ms, multiplier1.5即第 1 次等 1 秒第 2 次等 1.5 秒第 3 次等 2.25 秒……第 10 次等 10 秒。算下來第 10 次重連發(fā)生在首次斷連后約 112 秒遠(yuǎn)小于 300 秒看似安全。但忽略了網(wǎng)絡(luò)抖動某次重連請求發(fā)出后因 DNS 解析失敗延遲 800msEMQX 處理耗時 200msCONNACK返回又卡在防火墻隊列 300ms……總延遲達(dá) 1.3 秒。此時第 10 次重連尚未發(fā)起但 EMQX 已判定會話過期。最終我們將sessionExpiryInterval設(shè)為8640024 小時重連策略改為fixedDelay2000ms, maxAttempts5固定 2 秒重試最多 5 次總耗時 ≤10 秒并確保86400 10徹底消除會話過期風(fēng)險。3.4 EMQX 集群會話同步延遲的實測方法EMQX 集群不是強(qiáng)一致系統(tǒng)會話數(shù)據(jù)在節(jié)點間同步有延遲。我們用一個簡單腳本驗證# 在節(jié)點 A 上連接 client-A訂閱 topic/test # 立即在節(jié)點 B 上執(zhí)行 curl -s http://emqx-node-b:8081/api/v4/clients?clientidclient-A | jq .data[0].subscriptions # 若返回空數(shù)組說明同步延遲 0實測發(fā)現(xiàn)小集群3 節(jié)點平均同步延遲 80~120ms大集群12 節(jié)點達(dá) 300~500ms。這意味著如果客戶端重連時恰好路由到尚未同步會話的節(jié)點CONNACK中sessionPresentfalse客戶端就會清空本地訂閱。解決方案是在客戶端重連成功后強(qiáng)制執(zhí)行一次resubscribe而不是依賴sessionPresent標(biāo)志。我們在MqttCallback.connectionLost()中觸發(fā)一個帶 500ms 延遲的resubscribe任務(wù)避開同步窗口。3.5 Spring Boot 配置的“隱形陷阱”yml vs Java ConfigSpring Boot 的application.yml看似簡潔但對 MQTT 配置有致命缺陷spring: mqtt: url: tcp://emqx-cluster:1883 username: app-user password: app-pass # ? 這里無法配置 cleanSession、sessionExpiryIntervalspring.mqtt.*屬性只映射到MqttPahoClientFactory的基礎(chǔ)字段URL、用戶名、密碼高級 MQTT 選項如cleanSession必須通過 Java Config 顯式聲明Bean public MqttConnectOptions mqttConnectOptions() { MqttConnectOptions options new MqttConnectOptions(); options.setServerURIs(new String[]{tcp://emqx-node1:1883, tcp://emqx-node2:1883}); options.setUserName(app-user); options.setPassword(app-pass.getBytes()); options.setCleanSession(false); // 關(guān)鍵必須顯式設(shè)為 false options.setConnectionTimeout(30); options.setKeepAliveInterval(60); // EMQX 5.0 支持 MQTT 5.0可設(shè)會話過期時間 if (options instanceof Mqtt5ConnectOptions) { ((Mqtt5ConnectOptions) options).setSessionExpiryInterval(86400L); } return options; }3.6 遺囑消息Will Message的雙重保險設(shè)備離線通知依賴 Will Message但它的可靠性受cleanSession影響極大。當(dāng)cleanSessiontrue時客戶端斷開即發(fā)送 Will當(dāng)cleanSessionfalse時只有“首次連接時建立的會話被銷毀”才發(fā)送 Will。而 EMQX 銷毀會話的條件是客戶端以cleanSessiontrue重連或會話過期。我們最初的 Will 消息設(shè)置為qos1, retainedfalse結(jié)果在cleanSessionfalse下設(shè)備意外斷電后Will 消息從未發(fā)出。解決方案是Will Message 必須配置retainedtrue并確保topic是設(shè)備唯一標(biāo)識如device/status/ABC123這樣即使會話未銷毀新訂閱者也能立即獲取最后狀態(tài)。同時在客戶端connectionLost()回調(diào)中主動向device/status/ABC123發(fā)布一條offline消息QoS1形成雙重保險。3.7 TLS 加密下的重連特殊處理如果 EMQX 啟用 TLSssl://重連失敗率會顯著升高。根本原因是TLS 握手比 TCP 連接耗時更長且證書驗證、CRL 檢查等步驟易受網(wǎng)絡(luò)抖動影響。我們觀察到TLS 模式下 70% 的重連失敗發(fā)生在SSLHandshakeException: Remote host closed connection during handshake。解決方法有三客戶端禁用 CRL 檢查options.setSocketFactory(sslContext.getSocketFactory())時自定義SSLSocketFactory跳過 CRLEMQX 端關(guān)閉 OCSP Stapling配置listener.ssl.external.ocsp_stapling off增加 TLS 握手超時options.setConnectionTimeout(60)默認(rèn) 30并設(shè)置options.setKeepAliveInterval(120)TLS 連接?;钚韪L間隔。4. 實操過程與核心環(huán)節(jié)實現(xiàn)從零搭建抗重連的 Spring Boot MQTT 客戶端4.1 環(huán)境準(zhǔn)備與依賴聲明我們使用 Spring Boot 2.7.18兼容 JDK8 EMQX 5.0.22 Paho MQTT 1.2.5。關(guān)鍵依賴如下dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-integration/artifactId /dependency dependency groupIdorg.springframework.integration/groupId artifactIdspring-integration-mqtt/artifactId !-- 排除舊版 paho -- exclusions exclusion groupIdorg.eclipse.paho/groupId artifactIdorg.eclipse.paho.client.mqttv3/artifactId /exclusion /exclusions /dependency dependency groupIdorg.eclipse.paho/groupId artifactIdorg.eclipse.paho.client.mqttv3/artifactId version1.2.5/version /dependency !-- EMQX 5.0 支持 MQTT 5.0需額外引入 -- dependency groupIdorg.eclipse.paho/groupId artifactIdorg.eclipse.paho.mqttv5.client/artifactId version1.2.5/version /dependency注意spring-integration-mqtt3.0.x 默認(rèn)依賴 Paho 1.2.2存在MqttAsyncClient在重連時內(nèi)存泄漏的 BugGitHub Issue #782必須升級到 1.2.5 并排除舊版。4.2 自定義 MQTT 連接工廠注入所有關(guān)鍵參數(shù)Configuration public class MqttConfig { Value(${mqtt.broker.urls}) private String[] brokerUrls; // 如 [ssl://emqx1:8883, ssl://emqx2:8883] Value(${mqtt.client.id}) private String clientId; Value(${mqtt.username}) private String username; Value(${mqtt.password}) private String password; Bean public MqttConnectOptions mqttConnectOptions() { MqttConnectOptions options new MqttConnectOptions(); options.setServerURIs(brokerUrls); options.setUserName(username); options.setPassword(password.getBytes()); options.setCleanSession(false); // 關(guān)鍵禁用 clean session options.setConnectionTimeout(60); // TLS 下延長超時 options.setKeepAliveInterval(120); // TLS 保活間隔加長 options.setMaxInflight(1000); // 提高并發(fā)處理能力 options.setAutomaticReconnect(false); // ? 禁用 Paho 自動重連由 Spring 控制 // MQTT 5.0 會話過期時間秒 if (options instanceof Mqtt5ConnectOptions) { ((Mqtt5ConnectOptions) options).setSessionExpiryInterval(86400L); } // 設(shè)置 TLS 上下文若啟用 SSL if (brokerUrls[0].startsWith(ssl://)) { try { SSLContext sslContext SSLContext.getInstance(TLSv1.2); sslContext.init(null, new TrustManager[]{new X509TrustManager() { Override public void checkClientTrusted(X509Certificate[] chain, String authType) {} Override public void checkServerTrusted(X509Certificate[] chain, String authType) {} Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }}, new SecureRandom()); options.setSocketFactory(sslContext.getSocketFactory()); } catch (Exception e) { throw new RuntimeException(Failed to init SSL context, e); } } return options; } Bean public MqttPahoClientFactory mqttClientFactory() { DefaultMqttPahoClientFactory factory new DefaultMqttPahoClientFactory(); factory.setConnectionOptions(mqttConnectOptions()); return factory; } }4.3 構(gòu)建高韌性消息通道適配器Component public class MqttMessageHandler implements MqttCallbackExtended { private final Logger logger LoggerFactory.getLogger(MqttMessageHandler.class); Autowired private MqttPahoClientFactory clientFactory; Value(${mqtt.input.topic}) private String inputTopic; // 如 sensor//temperature Value(${mqtt.output.topic}) private String outputTopic; // 如 command//execute private MqttMessageDrivenChannelAdapter channelAdapter; private MqttAsyncClient mqttClient; PostConstruct public void init() throws Exception { // 創(chuàng)建客戶端實例非自動連接 this.mqttClient new MqttAsyncClient( brokerUrls[0], // 主 Broker URL clientId, new MemoryPersistence(), clientFactory.getConnectionOptions() ); this.mqttClient.setCallback(this); // 構(gòu)建適配器 this.channelAdapter new MqttMessageDrivenChannelAdapter( mqttClient, clientFactory ); this.channelAdapter.setCompletionTimeout(10000); this.channelAdapter.setConverter(new DefaultMQTTMessageConverter()); this.channelAdapter.setOutputChannel(mqttInputChannel()); // 接收消息的 Spring Channel // 設(shè)置重連監(jiān)聽器關(guān)鍵 this.mqttClient.setBufferedMessageControl(new BufferedMessageControl() { Override public void onBufferedMessagePublished(String topic, MqttMessage message) {} Override public void onBufferedMessageDiscarded(String topic, MqttMessage message) { logger.warn(Buffered message discarded: topic{}, msgId{}, topic, message.getId()); } }); } Bean public MessageChannel mqttInputChannel() { return MessageChannels.publishSubscribe().get(); } Bean ServiceActivator(inputChannel mqttInputChannel) public MessageHandler mqttMessageHandler() { return message - { String payload new String((byte[]) message.getPayload()); String topic (String) message.getHeaders().get(mqtt_receivedTopic); logger.info(Received from {}: {}, topic, payload); // 業(yè)務(wù)邏輯處理... }; } // 啟動適配器在 EMQX 就緒后調(diào)用 public void startAfterEmqxReady() { try { // 先連接 IMqttToken token mqttClient.connect(clientFactory.getConnectionOptions()); token.waitForCompletion(10000); logger.info(MQTT client connected successfully); // 再訂閱避免連接未穩(wěn)就訂閱 token mqttClient.subscribe(inputTopic, 1); // QoS1 token.waitForCompletion(5000); logger.info(Subscribed to topic: {}, inputTopic); // 啟動適配器 channelAdapter.start(); logger.info(MqttMessageDrivenChannelAdapter started); } catch (Exception e) { logger.error(Failed to start MQTT adapter, e); // 觸發(fā)降級邏輯如切換到本地消息隊列 } } // 重連邏輯由 Spring 管理非 Paho 自動 Override public void connectionLost(Throwable cause) { logger.error(MQTT connection lost, cause); // 清理資源 try { if (channelAdapter ! null channelAdapter.isRunning()) { channelAdapter.stop(); } } catch (Exception e) { logger.warn(Error stopping channel adapter, e); } // 延遲重連避免雪崩 Executors.newSingleThreadScheduledExecutor().schedule(() - { try { logger.info(Starting reconnection attempt...); // 重連前先清理舊連接 if (mqttClient.isConnected()) { mqttClient.disconnectForcibly(1000, 1000); } // 重新連接 IMqttToken token mqttClient.connect(clientFactory.getConnectionOptions()); token.waitForCompletion(10000); logger.info(Reconnected successfully); // 強(qiáng)制重訂閱繞過 sessionPresent 判斷 token mqttClient.subscribe(inputTopic, 1); token.waitForCompletion(5000); logger.info(Resubscribed to topic: {}, inputTopic); // 重啟適配器 channelAdapter.start(); } catch (Exception e) { logger.error(Reconnection failed, will retry in 2 seconds, e); // 遞歸重試最多 5 次 if (reconnectCount.get() 5) { reconnectCount.incrementAndGet(); connectionLost(e); // 遞歸調(diào)用自身 } } }, 2000, TimeUnit.MILLISECONDS); } // 其他回調(diào)方法messageArrived, deliveryComplete, connectComplete保持空實現(xiàn)或日志 Override public void messageArrived(String topic, MqttMessage message) throws Exception {} Override public void deliveryComplete(IMqttDeliveryToken token) {} Override public void connectComplete(boolean reconnect, String serverURI) {} }4.4 EMQX 服務(wù)端關(guān)鍵配置項詳解在emqx.conf中必須調(diào)整以下參數(shù)以zone.external為例參數(shù)原始值推薦值說明zone.external.max_clientid_len2364防止 Client ID 被截斷支持更長、更語義化的 IDzone.external.session_expiry_interval0永不過期86400顯式設(shè)為 24 小時避免集群同步延遲導(dǎo)致會話丟失zone.external.keepalive_max120020 分鐘120必須 ≥ 客戶端keepAliveInterval否則 EMQX 強(qiáng)制斷開zone.external.max_inflight201000提高 QoS1/2 消息并發(fā)處理能力減少堆積zone.external.max_mqueue_len100010000增大消息隊列長度應(yīng)對突發(fā)流量authentication.1.backendsbuilt_in_databasejwt或http禁用匿名登錄強(qiáng)制認(rèn)證避免非法 Client ID 沖突注意修改后必須執(zhí)行emqx_ctl cluster join emqxnode1使配置在集群內(nèi)同步并重啟節(jié)點。4.5 生產(chǎn)環(huán)境監(jiān)控與告警指標(biāo)光靠日志不夠必須建立量化監(jiān)控。我們在 Prometheus Grafana 中接入以下指標(biāo)客戶端側(cè)mqtt_client_connection_status{client_idprod-springboot-mqtt-v1.2.3-7a8b9c}1已連接0斷開mqtt_client_reconnect_total{client_id...}累計重連次數(shù)1 小時內(nèi) 5 次告警mqtt_client_message_delay_seconds{topicsensor//temperature}消息端到端延遲 P95 2s 告警EMQX 側(cè)通過/metricsAPIemqx_client_connected_count當(dāng)前連接數(shù)突降 30% 告警emqx_session_created_total會話創(chuàng)建總數(shù)1 小時內(nèi)激增 500% 告警可能 Client ID 沖突emqx_client_disconnected_total{reasonkicked}被踢出連接數(shù)0 即告警可能認(rèn)證失敗我們設(shè)置了一條黃金規(guī)則當(dāng)mqtt_client_reconnect_total的增量速率rate在 5 分鐘內(nèi)超過 0.1 次/秒且emqx_client_connected_count同步下降則 100% 是服務(wù)端配置問題立即檢查 EMQX 日志。4.6 壓測驗證用真實流量檢驗重連韌性我們用mosquitto_pub模擬 1000 個設(shè)備每秒向sensor/123/temperature發(fā)送 QoS1 消息持續(xù) 30 分鐘。同時人為制造故障網(wǎng)絡(luò)層故障在 EMQX 節(jié)點上執(zhí)行iptables -A OUTPUT -p tcp --dport 1883 -j DROP模擬斷網(wǎng) 10 秒服務(wù)端故障systemctl stop emqx停止主節(jié)點 30 秒認(rèn)證故障臨時修改 EMQX 用戶密碼觸發(fā)認(rèn)證失敗。壓測結(jié)果顯示網(wǎng)絡(luò)斷開 10 秒客戶端在 2.3 秒內(nèi)完成重連消息丟失率 0.02%QoS1 保證主節(jié)點宕機(jī) 30 秒客戶端自動路由到備用節(jié)點重連耗時 4.7 秒會話無縫遷移sessionPresenttrue認(rèn)證失敗客戶端在 3 次重試后停止拋出MqttSecurityException觸發(fā)告警人工介入修復(fù)。實測心得壓測必須包含“故障注入”純功能測試永遠(yuǎn)發(fā)現(xiàn)不了重連問題。我們最初只測了連接成功結(jié)果上線后遇到網(wǎng)絡(luò)抖動就全線崩潰。5. 常見問題與排查技巧實錄那些寫在日志邊緣的真相5.1 問題速查表根據(jù)現(xiàn)象快速定位根因現(xiàn)象最可能根因驗證方法解決方案重連后消息全部丟失cleanSessiontrue或sessionExpiryInterval過短查 Paho 日志CONNACK中sessionPresent字段顯式設(shè)cleanSessionfalsesessionExpiryInterval86400重連日志顯示Connection refusedClient ID 長度超限或格式非法查 EMQXemqx.log中invalid clientid關(guān)鍵詞縮短 Client ID 至max_clientid_len以內(nèi)或調(diào)大該值重連成功但訂閱失效EMQX 集群會話同步延遲在不同節(jié)點查/api/v4/clients?clientidxxx的訂閱列表重連后強(qiáng)制resubscribe延遲 500ms 執(zhí)行TLS 模式下重連頻繁失敗SSL 握手超時或 CRL 檢查失敗Netty 日志中SSLHandshakeException延長connectionTimeout至 60禁用 CRL 檢查重連后 CPU 占用飆升Paho 客戶端內(nèi)存泄漏1.2.2 版本 Bugjstack查看MqttAsyncClient線程堆棧升級 Paho 至 1.2.5排除舊版依賴日志無報錯但消息不消費Spring Integration 通道阻塞或線程池耗盡jstack查看task-scheduler線程狀態(tài)增大taskScheduler.pool.size檢查MessageChannel是否背壓5.2 那些“看起來像 Bug”的設(shè)計事實“為什么重連后 QoS1 消息重復(fù)”這不是 Bug是 MQTT 協(xié)議的“至少一次”語義保證。當(dāng)客戶端發(fā)送PUBACK后網(wǎng)絡(luò)中斷EMQX 未收到確認(rèn)會重發(fā)PUBLISH。解決方案是業(yè)務(wù)層做冪等如消息 ID 去重而非試圖禁用重發(fā)。“為什么 EMQX 不支持sessionExpiryInterval0永不過期”EMQX 5.0 已支持但需在emqx.conf中顯式配置zone.external.session_expiry_interval 0。注意0表示永不過期但會占用內(nèi)存不推薦生產(chǎn)環(huán)境使用?!盀槭裁碝qttMessageDrivenChannelAdapter不提供resubscribe方法”因為 Spring Integration 認(rèn)為訂閱是連接建立時的原子操作。我們必須繞過它直接調(diào)用MqttAsyncClient.subscribe()并在connectionLost()中手動管理。5.3 我踩過的 3 個最深的坑坑一K8s Service 的sessionAffinity: ClientIP陷阱我們給 EMQX 集群配置了 K8s Service并開啟sessionAffinity: ClientIP期望客戶端始終路由到同一節(jié)點。結(jié)果發(fā)現(xiàn)當(dāng)客戶端重連時K8s 的ClientIP親和性在連接斷開后失效新連接被隨機(jī)分發(fā)到其他節(jié)點而該節(jié)點沒有會話數(shù)據(jù)導(dǎo)致sessionPresentfalse。解決方案**關(guān)閉sessionAffinity改用 EMQX 自身的
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
在现视频女上位好爽| 欧洲精品一区二区三区| 国产女同在线观看视频| 成人五月天色网| 日日操天天操| 黄色欧美性爱视频| 呦呦影院| 超碰人妻97| 国产成人AV麻豆| 天天干人妇| 香伊人在线| 熟女熟妇一区二区三四区| 日本不卡高清免v欧美日韩在线观看| 欧美一区二区三区四区综合| 啊啊啊爽爽| 91欧美综合在线| 骚鸭AV| 欧洲中文字幕| 日韩在线人妻网站| 大乔未久88一区| 成人日本精品九区| 国产日本熟女顶级一区二区三区视频 | 日本A级视频| 久久97| 一区二区娱乐网站| 国产亚洲精品第一最新| 国产女性无套 免费观看| 另类亚洲一区二区三区| 蜜臀无码视频在线观看| 中文乱码字字幕在线第5页| 超碰在线在公开超碰在线在公开| 天天综合麻豆视频| 亚洲第91页 | 欧美少妇色综合| yazhousetuoumei| 美女在线H91| 国产精品久久久久久夜夜夜| 观看视频图片一区二区三区| 91大神电影天堂| 欧美熟妇视频 | 大香蕉欧美| 啊啊啊啊操死我| 天天影视综合色| 97超碰影音| 欧美一品道| 青青草中日韩在线| 99精品九九九九九九| 色天天野狼综合社区| 久久九操在线观看| 91丨熟女丨丰满熟女| 欧美国产欧美在线观看| 熟女人妇一区二区三区| 97最新在线播放视频| 日韩人成网站在线播放| 成人午夜视频免费播放| 91人人看| 台湾大香蕉99热| 2019天天操天天爽天天拍| 色 亚洲 91| 五十路成人在线视频二区三区| 久久超碰天天| 人人搞人人插人人操| 无码直播久久久| 9国产超碰| 台湾成人无码AV| 啪啪啪精品视频| 操逼日韩无码 | 三上悠亚在线毛片91| 国产婷婷综合在线观看| 久久精品国产亚洲AV高级北京| 干婷婷综合网| 高清不卡视频| 欧美综合第一页| 欧美极品| 97玖玖人妻| 韩国嫰模上门援交视频| 夜夜草天天| av一区二区三区 中文| 91亚洲精品青草| 精品久久九| 色噜噜狠狠色综合日日| 亚州久久9| 欧美一二级| av中亚| 99热在线观看| 和协影院中文字幕三区| 女性91网站| 欧美一级做a爰片免费视频| 青青欧美在线| 久久精品一区一起草| 成人五月天丁香激情综合| 日韩卡一卡二卡三在线| 久久大香蕉手机高清| 超碰97综合网| 国产精品视频麻豆入口| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 国产剧情一区在线观看| 极品人妻少妇综合| 岛国在线一区二区三区| AV天堂男人的天堂| 女色综合| 日日夜夜狠狠| 大学生美女口爆| 成人三级片无码| 国产婷婷一区| 99色网| www99热| 激情婷婷丁香| 亚洲欧美综合区自拍另类| 九九成人| 午夜福利合集| 91操人视频| 骚女高跟AV在线| 色妹子A V| 超碰 国产熟女精品一区| 放黄片放3级黄片没穿衣服| 丁香五月天堂网| 久久久久久无码人妻中文字幕| 操www| 日日干夜夜操视频h| 97日韩超碰超碰中文字幕| 欧美系列在线一区二区| 97伦乱| 国产操偷| 91精品少妇搡搡搡| 91女在线观看| 色吧5亚洲| 99婷婷| 欧美激情亚洲| 色爱综合网欧美| gogogo免费高清看中国国语| 色欲人妻一区二区在线| av午夜影院在线播放| 青青国产在线拍揄自揄拍| 免费αV在线视频| 手机不卡视频不卡在线一二三区| 国产午夜精品理论片a大结局| 操人妻逼91| 一级乱伦网站| 色噜噜人妻av中文字幕| 99人人干| 日本精品999| 丰满翘臀美女影院视频| 亚欧高清| 青青草一区二区高清无码视频| 九九热在线视频| 婷婷久月| 色五月第四色| 久久久中文| 97碰久久| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲欧综合另类无码一区| 男人的天堂日韩| 国产精品三级视频网站| 黄骗免费网站| 嗯,啊。舔我逼| 亚洲人妻一区二区三区| 9国产超碰| 国内外毛片在线观看| 久草婷婷| 午夜AV人气不卡| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 三级日本一区二区三区| JuliaAnnXXX888| 91美腿丝袜在线观看| 国产精品网址| 人妻无一区二区三区| 人妻少妇久久中文| 中文字幕在线观看AV| 老熟女乱伦一区| 日韩欧美~中文字| 天天看人人操屄犊摸阴| 丝袜性亚洲| 99re国产中文字幕| 在线视频免费播放一区| 一区AV| 中文字幕AV中出| 色色综合97| 97人人射| 强奸乱亚洲| 伊人一级免费黄片| 麻豆美女丝袜人妻中文| 一卡二卡三卡| 一区超碰一区| 一区二区三区色综合| 女同在线视频一区| 亚卅熟女乱色| 黄色性爱网网| 亚洲成人性| 强奸抽插av| 欧美日韩亚洲天堂| 9美女超碰在线免费观看| 亚洲码和欧洲精品激情系列| 91爱综合| 亚洲激情四射| 蜜乳av首页| 亚洲国产午夜真人一级片中文字幕精品黄网站| 思思热久久成人| 日本久久女同性恋视频| 少妇无码999| 在线播放成人高清免费视频| 天天摸,夜夜摸| 肏逼福利网站| 国模无码人体一区二区三| 激情文学亚洲| 亚洲在线A| 久久骚| 求求你操操我| 天天摸夜夜操视频| 人妻黑丝袜电影| 大香网伊人久久综合网eew| 啊啊啊啊一区| 91色碰| 色丁香五月婷婷| HEYZO高无码国产精品227| 免费伦费视频在线观看| 鸡巴插逼视频| 簧片免费看视频| 91黑人无码激情在线| 丝袜剧情| 嗯阿好爽好紧| 日夜久久久九九九久| 狠狠操一区二区| 久久久性爱视频| 极品内射| 在线五区| 久久成年片色大黄全免费网站| 淫淫综合网| 白嫩91在线亚洲| 久久思思热| 天天影视色香色欲| 男人的天堂欧美| 成人草草视频| 婷婷中文字幕| av在线观看不卡网站| 国产精品4p在线观看| 欧美性爱综合,免费| 极品肉射| 天天日天天干天天整| 免费精品福利在线观看| 久久婷婷五月综合| 超碰在线国产| 亚洲色悠悠久久88| 男人的天堂 在线一区| 91在线欧美| 插欧洲美女欧美精品| 国产性感骚丝袜在线| 色97国产69香蕉| 26uuu性| 色综合中文字幕不卡| 亚洲一区二区中文字幕| 91高清无码下载| 人妻酒店出差被中出免费在线播放| 风韵犹存大大大大香蕉| 8050无码八戒| 超碰 欧美| 国产乱码精品一区二区三区四川| 香蕉一区二区三区在线视频| 91成人无码| 丁香婷婷色五月| 午夜视频久久久| 狠狠色综合网| 男生通女生屁股| 丁香五月性| 久久加勒比| 天美av在线观看| 激情九月婷婷| 久久露脸国产老熟女| 精品熟女一区=区三区| 少妇人妻激情四射| 欧美国产精品久久九九| 欧美同性恋 的搜索结果 - 91n| 亚洲日本加勒比在线| 亚洲色系另类精品国产| 欧美日韩1234| 中文在线视频| 久久久久久久久久久人妻| 精品91摸| 精品无码产区一区二| 96久久久久| 一本久道久久综合狠狠爱一密臀精| 伊人激情五月天一区二区| 欧美日本天堂| 国产成人网站在线观看| 国产精品视频内谢女人| 九九成人精品| 精品国产精品一区二区| 国产最火爆久久国产网站网站| 蜜桃视频一区二区三区| 男人天堂一区二区| 亚洲,日韩,欧美,成人播放| 国产精品一区在线播放| 欧美精品91| 久久黄黄| 色播综合| 无码 有码 国产18p| 永久电影三级在线观看| 少妇蹲下买菜露大唇0| 99热97| 91中文在线| 亚洲 国产 精品一区| 一个国产在线综合网站| 99999精品视频| 97视频在线视频| 国产伦乱91| 青娱乐91| 欧美少妇第一页| 日韩高潮一区| 美女AV一区二区| 老女人老91妇女老热女| 欧美色图在线视频少妇| 超碰人妻中文在线| 人伦四五区| 日本操逼视频在线| 狠狠久久手机视频精品| 国产女性无套 免费观看| 91爱看| 九久久九精品视频| 宗合情欲网| 99.色网| 久九干| 色爱欲亚洲| 麻豆国产成人精品| 国产诱惑| 91色插| 色综合一本| 欧美性爱无码一区二区三区| 无码最新| 一级A啪啪啪啪| 亚洲日本韩国极品一区二区| 日韩中字av一区| 青青草色情网站视频| 大香蕉青青9| 天天92av| 国产视频一区二区三区在线免费观看 | 亚洲国产美女久久久久 | 久久五月天婷婷丁香中文字幕| 国产操伦| 久久透逼视频| 亚洲偷拍欧美激情| 夜夜狠狠躁日日躁色视频| 91亚州欧美| 色色色色网站| 欧美淫乱视频| 国产精选三级在线观看| 成人天天爽| 中字幕人妻一区二区三区| 人妻性爱一区二区| 国产精品亚洲天堂网址| AV中文字幕三四五| 日韩在线性爱免费视频| 国产精品福利资源在线尤物| 精品欧美老熟女一二区| 天天躁日日躁AAAXX| 人妻干天天| 日韩欧亚太美不卡| 91美女国产在线| A级片日韩欧美国产欧美视频精选观看 | 中文字幕一区二区三区视频播放| 人人妻人人操人人乐| 一区二区三区四区五区久久久久久| 婷婷干黄色| 伊人青青一区成人视频在线观看区 | 日日摸日日碰夜夜爽视频| 鸡巴插逼视频| 91熟女.com| 熟女人妻一区二区三区| 色www精品视频在线观看| 欧美性爱日韩高清| 久久精品国产99国产精品亚洲| 毛片一区二区| 啊啊啊啊在线观看网址| 天天干天天舔| 蜜臀AV成人精品蜜臀| a片偷拍视频| 97干天天| 久久 国产精品 一区| 久久久免费高清中文视频| 天天爽夜夜操| 亚洲色图加勒比| 高清无码 国产精品| 涩涩五月天| 国产丸一视频| 久久这里只有精品9| 日韩三级在线观看mp4| 丁香六月啪| 无码人妻1727| 神马久久免费电影观看| 久久人妻97久久久久久久| 天天噜| 桃色五月天| 人人摸人人干| 加勒比伊人| 草草影院最新网址| 亚洲色图综合网| AA特级绝黄| 91综合网站| 欧美一级专区免费大片| 五月丁香狠狠爱| 欧美亚洲国产91在线| 欧美日韩亚洲国产中文永久天天看| 三级三久久线久久99久目本WW| 91老熟女| 欧美色图另类图片| 欧美一级专区免费大片| 乱人伦 国语对白:视频直接看| 青草草免费网站av| 超碰在线一区二区| 狠狠操官网| 91天堂丝袜美腿| 躁躁日曰躁2020| 九九九九九九九精品视频| 亚洲天堂AV在线播放| 亚洲色图欧美| 欧洲综合色| 97在线播放 | 欧美九九99久久精品| 日韩AC| 黄色视频特级毛片| 天天谢天天干| 人妻激情偷乱视频一区二区三区| 国产精品乱码久久久久| 啊啊啊不要啊啊受不了了视频在线 | 免费观看啪视频| 亚洲欧洲精品视频发布| av天天在线观看| 五月丁香啪啪| 日本精品无码三级网站| 91亚洲欧洲| 欧美日韩性爱视屏免费看了| 日本午夜操逼| 国产一级高清免费观看| 久久久久久国产手机AV| 熟妇色99| 日本免费人成视频播放120秒| 蜜桃视频精品一区二区三区| 日本人妻伦在线中文字幕| 精品久久久久久AV无码| 久久综合97| 91啪啪| 日韩在线一区高清在线| 亚洲欧美国产其他二区| 欧美很很操视频| 亚洲城人男人的天堂| 歐美性天天| 超碰在线91| 天天色,天天干,天天干| 97色色网| 91操人| 97视频在线播放| 国产资源中文字幕在线| 99热国产精品| 97精品免费视频网站| 久久国产热视频97电影| 蜜臀久久99精品久久久久久久久| 好舒服视频| 操逼网站网站| 天天干,天天日| 九九在线视频| av九九| av黄图片在线观看| 青青草原成人| 少妇精品久久久八区九区| 国产精品乱人伊人网| 亚洲欧美一区二区三区在钱蜜桃| 91干熟女| 黄网色一区二区三区四区精品| 中国农村熟妇毛片视频| 天天肏天天干| 乱伦强奸区日韩| 热99这里有精品综合久久| 久久大香蕉97| 久久高潮妇女视频| 中文字幕一区二区免费在线| 家庭乱伦国产精品| Blackedraw视频一区二区| 欧美另类精品xxxx| 99精品视频在线观看| 五月天婷婷色| 久久久穴999| 精品国产乱码久久久兰草影视| 九热大香蕉| 日欧毛片久久| 91天天| 久久久久久久伊人精品| 97人人超| 北京美女一区二区| 人人操,操人人| 秋霞网—男女啪啪亚洲免费体验区 | 超碰这里有精品| 亚洲国产精品无石码久久| 18禁无码永久免费无限制| 国产福利av精彩对白| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 亚洲中文字母在线播放| 校园春色 男人天堂 | 欧美熟妇操操视频| 欧美操逼录像国产黄色国产| 日本黄大片在线观看视频| 中文字幕成人| 青青草导航在线视频| 日韩中文字幕视频| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 成人一二三区| 亚洲成人av电影在线| 按摩中文字幕| 久久精品国产Aⅴ| 天天插天天操| 青青青在线高清视频在线一二三四区| 亚洲国产综合视频| 欧美黑人性猛交91| 亚洲综合嫩| 色色色色综合网| 国产视频不卡在线观看| 中文字幕交换人妻| 天天干人妇| 99九九久久| 五月亭亭六月丁香| 久操B网| 亚州一区二区| 中文字幕少妇色| 天美传媒精品一区二区| 精品久久久中文字幕不| 成人26uuu| 欧美熟女逼久久久久久| 精品久久久亚洲AV成人网站| 欧美亚洲首页| 男人干美女| 超碰在线欧美性爱激情| 天天综合网1| 免费看欧美美女黄色大片| 久久国产精品视频| 亚洲丝袜色图| 成人热久久精品| 欧美综合自拍| 欧洲亚洲综合| 大香蕉综合| 国产黄色视频久久| 人人操人人精品影片| 黑丝少妇在线观看| 亚洲一级性爱视频免费看| 亚洲熟妇A V黑人| 99re这里只有精品3| 激情综合网五月婷婷五月天| 青草精品视频一日本久久久久网站| 97操操| 精品欧美А∨无码黑人大荫蒂| 97丝袜亚洲在线播放| 夜夜爽爽爽| 新版天堂中文资源8在线| 精品视频一区二区| 久久午夜神马| 操逼www.| 91观看 国产白丝| 激情久久日韩精品中文字幕麻豆| julia中文字幕在线观看| 91美女色视频亚洲| 人妻熟女一区二区| 久草这里只有精品 | 久久人妻无码毛片A片麻豆| 岛国999| 爱丝福利| 久久六六| 免费精品福利在线观看| 精品国产乱码久久久久久久久1| 日本大片日本一区二区免费高清| 亚洲国产剧情少妇激情| 怡红院成人av| 超碰97综合| 国产精品嫩草影院免费| 国产成人无码高清| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 人妻精品4K4K4K4K4| 亚洲精品一区二区免费在线观看| 欧亚三区动漫| 亚洲成人福利电影免费| 日韩在线视频1234| 日本一级不卡一二区| 国产97在线视频| 欧亚性爱啪啪| 99九九久久| 色噜噜狠狠色综无码久久合欧美| 精品欧美А∨无码黑人大荫蒂| 亚洲九区| 91狠狠综合久久| 五月丁香拍拍激情综合三级| 99热免费| 国产精品午夜AV完会免费 | 亚洲男人天堂2019| 一区二区三区一亚洲中文字幕、综合区灬| 国产精品福利资源在线尤物| 九九色图| 亚洲第一页色网| 最近的最新的中文字幕视频| 国产成人天堂| 影视综合无码少妇| 亚av顶级裸体一区二区三区四区五区 | 中文字幕黄色一起草| 中出789在线视频| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 99久久精品国产系列| 亚欧Av| 日韩钢筋无码高清啾啾啾| 偷拍在线观看视频| 97干97色| 麻豆AV一区二区| 伊香蕉综合久久久久久久噜噜噜| 高清无码久操视频| 久久五月婷| 国产精品午夜精品| 欧美人人AAA| 欧美日韩中国x| 欧美视频边做饭边橾| 台湾肥佬网一区二区三区| 国产精品白丝www| 婷婷五月天小说| 中文字幕精品码亚洲| 免费视频a级毛片免费视频| 污污污8888| 99在线免费公开视频| 久久99精品九九久久久婷婷| 国产精品成人蜜臀AV在线| 91熟女.com| 久久艹逼视频| 天天综合97| 大香蕉天天看妹子| 日韩色| 综合大香蕉美。| 91强奸乱轮| 欧美少妇高潮视频| 蜜桃中文字日产乱幕4区| 日韩黄片视频试看| 91色婷婷综合久久中文字幕二区| 精品久久久无码| 亚洲国产成人精品999| 久久风骚城市| 久久色激情一区二区三区| 久久久久亚洲三级电影| 夜夜夜爽www精品视频| 久久久噜噜噜久久久| 日韩人成网站在线播放| 九九热精品| 97视频620| 亚洲少妇自拍中文字幕懂色| 亚洲视频一二区| 国产 码在线成人网站| 被男人吃奶很爽的毛片| 亚洲少妇自拍中文字幕懂色| 久久一留热品黄| 激情丁香五月婷婷| 日本人妻A片成人免费看片| 九月丁香婷婷色| 丁香色狠狠色综合久久小说| 久久久久幕乱码| 91麻豆天美传媒HD| 久超碰在| 成年女人一区| 后入 亚洲 美女 射| 秋霞欧美性爰视频| 日本视频一区二区三区| 婷婷丁香六月| 五月丁香激情综合网| 最近2019中文字幕国语免费版| 九九精品无码专区免费| 中国AV美女| 婷婷五月天成人| 黑丝自慰喷水网站| 色小视频蜜乳| 天天操夜夜嗨| 两性综合网| 精品久久久亚洲AV成人网站| www.久久久久| 国产精品肉丝自拍| 欧美激色| 亚洲三级。日韩三级| 久久超碰97| 老司机午夜精品视频| 日韩一级性爱无码| 无码137片内射在线影院| 天天谢天天干| 日韩另类| 亚热日本熟女| 一级一性爱免费视频| 免费αV在线视频| 在线中文字幕极品av| 国产成人无码久久精品| 日本久久网| 五十路熟女工口| 四虎影视永久在线观看精品免费网站| 600国产精品视频| 日本欧美一区二区三区免费| 久草综合京东| 久热精品在线| 欧美精品99久久久**| 口爆综合网| 97在线播放| 麻花豆传媒剧国产MV出差| 人人操人人狠狠操| 中文字幕诱惑制服人妻丝袜美丝袜美| 精品人妻一区二区三区不卡断 | 黑丝制服中文字幕| 亚洲成人黄色在线观看| 欧美刺激色黄片免费看| 欧美日韩资源在线| 97天天摸天天爽| 中文字幕精品资源在线| 97在线青| 日韩午夜精品一区二区三区电影| 亚洲天堂第一页| 免费国产电影一区二区| 欧美最婬乱婬爆婬性视频 | www.99中文字幕| 国产精品欧美激在线| 成人a v在线播放免费| 天天色悠悠激情| 少妇综合网| 少妇毛片久久| 久久精品国产99精品亚洲蜜... | 中文字幕加勒比海高清无码免费视频| 丁香九月婷婷| 岛国人妻少妇av在线观看| 日韩欧美大片免费高清啪啪| 精品97精品97| 日韩不卡a级视频专区| 久操视频免费观看| 伊人久久婷婷| 日本一区不卡| 青青草视频久久久久| 日韩激情小说一区二区| 智利AV在线网| 女优视频第10页| 欧美中文字幕日韩在线| 亚洲s色图| 日韩美一区| 亚洲天堂中文字| 久久久久国产精品久久久| 超碰亚洲欧美日韩无| 亚洲丝袜色| 日韩另类色图| 日本精品一区二区三区四区的功能| 天天综合色| 亚洲免费97免费| 丰满人妻一区二区三区四区| 亚洲色图图片| 后入福利| 欧美日韩亚洲电影| 精品国产久热在线观看| 国产成人免费观看在线视频| 久久午夜鲁丝片| 人妻精品视频一区二区三区| 99热一区二区三区四区| 天天夜夜rb| 97欧美久久久久久久| 日本道日本道中文字幕日本道最新日本道在线观看| 亚洲官网在线| 美国久久一二三四| 国产精品 午夜福利| 97国产亚洲中文在线| 成 人 影视 一区 二区 三区 四区 | 久午视频| 好爽免费视频| 亚洲人妻爽爽爽| 精品午夜福利导航| 欧美后入| 亚洲色图尤物视频| 操逼www.| 九九久久综合| 乱精品一区字幕二区| 亚洲免费精品一区| 18岁禁 茉莉成人久久| 97伪v| 97欧美色综合| 欧美九九九九九| 麻豆成人影音在线| 在线岛国新天堂8| xxxx网站亚洲精品| 久热九九| 无码91| 九九九九九用不成了| 欧美玖玖爱免费玖玖| 亚洲综合伊人无码久久| 欧美 亚洲 第一页| 国产99精品一区二区三区免费| 精品夜夜澡人妻无码| 91伊人大香蕉| 欧美日韩美女精品久草一区二区三区| 91美| 强奸乱伦免费网站| www.黄色在线| 伊人久久婷婷| 日韩电影天堂视频二区三区| 亚洲交换| 久久亚洲欧美中文字幕国语| 日韩不卡在线一区二区| 97蜜桃综合| 色亚州人久干视频在线观看免费版| 天天天肏屄肏屄肏屄欧美欧美| 91免费看一区二区三区| 欧美成人午夜免费福利785| 乱精品一区字幕二区| 欧洲亚洲天堂精品| 天堂成人网| 91 亚洲 欧美 日韩 国产 综合| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 人人摸.人人色| 亚洲麻豆精品二区三区| 99国产精品免费| 人人妻人人澡人人爽久久av| 免费黄色片。| 嗯嗯嗯不要不要免费视频| 亭亭在线资源| 激情抓乳插进去啪啪啪日韩 | 久久精品国产精品一区| 影音先锋国产精品| 国产成自自拍在线观看| 91成人18| 秋霞欧美性爰视频| 91爱欧美| 国产家庭乱伦表演| 中文伊人大香蕉视频| 国产人妻精品一区二区三区秋霞 | 东京成人一区| 久草免费在线视频| 亚洲天堂久久| 九九九九九九九九九九九蜜桃| 色屁屁影院www国产| 久久98| 99re在线视频这里只有精品| 女欧美一区二三区| 成人影 天天操 亚洲| 亚州高清AV| 性色av婷婷久久一区二区点复制| 91电影色诱| 色汉综合| 天天肏美女| 日韩欧美传媒一区国产| 久久伊人大香蕉| 天天草AV| 国产AV超爽| 任你干在线视频| 欧美青青视频| 中国一级αV| 97天天爽| 欧美黄业| 色97| 日韩大香蕉AV影片| 亚洲精品无码成人久久久99| 四虎视频在线观看| 中文字幕精品免费一区二区| 5252色欧美在线| 99久久精品国产系列| 日本九九久久99播| 精品久久久av无码免费| 一个人在线看的黄色电影网站| 夜夜精品视频一区二区| 久久人妻精品| 欧美午夜熟妇黑人精品91| 午夜精品久久久久久久99蜜桃一| 极品少妇久久久久| 超碰人人色| 亚州色综合| 男人的天堂2010| 欧美色www亚洲国产阿娇要播| 久久,精品一二三| 在线视频 亚洲精品| 日本免费不卡二区| 二男一女成人A片| 91高潮喷水美女| 狠狠色综合网| 熟妇色99| 欧亚乱色熟一区二区三四区| 亚洲欧美国产中文视频| 麻豆伊人网| 操逼操网| 蜜臀久久99精品久久久久久无删减| 天天色综合图片| 人人摸.人人色| 天天日日本| 亚洲欧美国产其他二区| 操少妞在线视频| 99热色精品| 麻豆国产视频精品观看| 97在线欧| 人妻社区男人天堂| 久久精品国产亚洲AV无码电影| 超碰97COm中文| 99999精品视频| 新版天堂中文资源8在线| 97视频在线观看免费高清| 亚洲综合影视| 丝袜熟女一区二区三区| 亚洲 欧美 精品专区 极品| 久艹99| AV中文在线可看| 日韩激情啪啪| 精品国产乱码久久| 精品中文一区二区| 日本超碰在线国产一区| 欧美少妇性爱网站| 密臀视频三区免费网站| 91女优在线观看 | 91GD.COM| 国产日韩手机视频在线| 一本色道久久综合精品婷婷| 亚洲色欲一区二区三区| 99自拍视频在线| 亚洲色图尤物视频| 少妇久久久久久| 美女爽到高潮91| 久久超碰免费的| 爽爽歪在线视频| 日韩中文字幕人妻视频| 偷拍偷窥与盗摄视频专区| 玖玖爱伊人玖玖爱| www被窝色com| 青青草原人妻| 亚洲国产激情国产av| 国产成人一级av88| 91免费看一区二区三区| 精品人妻av区天天看片| 国产中午字一暮区| 激情四射婷婷六月天| 欧美中文字幕一区| 麻豆国产尤物AV| 综合久久婷婷| AV污污污污| 久久这里是精品| 国产女人视频三四五区| 人妻天堂网| 天堂国产AV| 亚洲精品欧美专业| 91最新综合| 久久久久无码| 97天天摸天天碰| 99热这里是精品| 99久久久无码国产精品性男| 大香蕉免费乱伦视频| 日本性爱网址| 欧美日韩国产三级黄色| 午夜福利av电影在线| 乱操乱伦AV| 日韩字幕一区| 亚洲乱码精品一区二区| 男女做爰猛烈动高潮A片免费应用| AV乱伦国产| 国产精品不卡高清在线观看| 天天射天天操天天干天天吃2018 | 亚洲色图 欧美热图 清纯唯美 另类自拍 | 日韩无码久久熟女一级片| 亚洲色图20p| 国产极品久久久| 日欧毛片久久| 超碰这里只有精品| 欧美在线综合| 欧洲性人爱视频| 欧美日韩狠狠爱| 快播久久人人aV| 性感美女91影视| 超碰97精品| 午夜美女福利视频| 成人性爱av| 性色AV网站| 国产精品一级特黄aaa大片在线观看| 欧美性巨大╳╳╳╳╳高跟鞋| 国产性久久久| 婷婷色中文字幕| 婷婷性爱| 91天天综合网,天天综合网| 久久久久9999精品九九九| 九九九九九九九九九九精品视频| 97精品人妻一二三四| 久久久久熟女| 欧美v亚洲v综合v国产v妖精| 男人a天堂手机在线版| 日韩黄色一区二区三区| 久久久九97| 欧美性爱一内片一区二区三区| AV99热18这里只有精品| 男人天堂网手机版婷婷| 大香蕉中文| 午夜120视频在线观看| 精品黑人一区二区| 搡老女人老妇女老妇老熟女怎么读| 色呦呦、国产精品| 十八禁电影伊人网| 9久在线视频只有精品| 人人看人人爰人人操| 婷婷午夜| 东京热一区二区三区四区五区六区| 综合激情一一91| 日本一区不卡| 欧美极品性爱天天射| 五月婷婷色| 99久久这里只有精品| 欧美成人国产精品| 秋霞Av理论一级在线| 多毛小伙内射老太婆| 六六久久日韩不卡| 手机av天堂久久久久| 我爱操| 亚洲性爱免费电影| 亚洲操人| 亚洲 综合 第一页| 日本在线观看网址| 日韩国产中文字幕| 麻豆伊人网| 国产精品久久久亚洲第一牛牛_在线观看| 97超碰磁| 久久日韩毛| 色香91| 伊人久久在线视频观看| 色玖玖| 久久久久96| 日韩欧美成人性爱在线| 天堂岛av| 怡春院久久| 天天视频综合在线观看视频| 大香蕉伊利av| 东京太热男人的天堂久久久| 香蕉黄色一级视频| 久久久99久9| 久久久久久久| 天天日天天干天天整| 高潮综合网| 凹凸视频在线一区二区| 九九色热| 2017天天操天天日| 上海一级黄片| 欧美熟妇操操视频| 香蕉国产精品麻豆亚洲欧美日韩| av婷婷色婷婷色六月| 97网址97| 精品国产Av无码久久久亚洲| 一区二区激情国产熟女 | 亚洲成人性爱网站在线播放| 99国产精品在线观看| 极品少妇久久久| 91久操| 99999久久精| 8050无码八戒| 青青草原成人| www99热| 美女天天干| 玖玖婷婷五月天| 蜜桃精品视频一区二区三区| 亚洲av影音先锋| 超碰久久网| 欧美另类综合久久| 加勒比久久av| 美女自卫慰黄网站免费| 91人妻最真实刺激绿帽| 亚洲激情色片| 啪一啪免费视频| 尤物视频网 刘玥| 亚洲天堂无码| 九热大香蕉| 操逼操逼视频操逼| 亚洲色欧| 欧美视频中文字幕区| 大香蕉伊人75| 熟妇人妻一区二区| 国产精品一区二区a| 99在线视频播放| 亚欧高清在线| 夜夜嗨TV| 久久久98网站免费视频| 性色AV网站| 亚洲美女30b| 国产激情在线观看| 中文字幕一区二区三区50路| 91色艳| 性爱Av免费| 一本久久久精品| 超碰人人妻| 超碰色男人操熟女| www被窝色com| 国产精品一区二区黄片| 国产后入| 久久久久久久六六| 伊人五月天| a片 xxxx受爽视频| 色哟哟国产精品免费网址| 国产最新小视频在线播放下载 | 亚洲国产中文字幕| 人妻久久久久久久久久久久久久久| 精品一级毛片在线观看| 四季AV综合网址| 亚洲av强奸乱伦| 久久超碰国产一区二区三区| 欧美激情片一区二区| 色婷亚洲五月在线观看| 亚洲熟伦熟妇AV无码春色| 综合视频91| ′ !γ}丶。。久久精品欧美一区二区三区| 在线观看高清AV| 亚洲激情深爱文学小说网站| 99啪| 91粉嫩萝控精品福利网站_精品影音先锋国 | 精品久久久高清无码| 超碰97人人乐| 精品十三区| 色蜜AV| 综合操逼| 秋霞一级鲁丝片A片| 狠久久| 国产女同性恋视频| 婷婷五月天补不补| 操逼网站视频漫画国产| 一二三区视频在线观看| 蜜臀AV成人精品蜜臀| 熟女人妻av在线资源,黄色的资源 粉嫩国产精品久久粉嫩 | 亚洲?V高清一区二区三区尤物| 啊啊啊啊啊啊好多水| 加勒比人妻综合| 新版天堂中文资源8在线| 亚洲国产91精品一区二区久久| 国产精品农村妇女| 97干com| 五月婷婷色色| 久久AV无码网址| 91内射| 日韩BBN| 国产女主播视频在线观看| aaa淫乱视频| 色色亚洲| 我爱大香蕉| 亚洲中文字母在线播放| 五月大香蕉| 色青青久久影视| 啪啪啪精品视频| 91伊人久| 91AV入口| 欧美日韩在线视频网站| 欧美亚洲系列| 亚洲狠狠入| 欧美 日韩第一性色| 大香蕉十区| 亚洲不卡不卡中文字幕不卡 | 92性色国产午夜福利在线661| 精品黄色电影| 国产精品福利视频| 美女t无毒不卡不卡| 清纯唯美亚洲另类| 中文字幕激情小说| 国产自偷| 99rre在线精品99re8| 亚洲男人在线观看天堂| 天天热精品| 国产日韩美女小穴视频网站不卡| 欧美九一精品久久久熟妇| 精品二区三四区五电影 | 久久久久久加勒比| 日韩二区三四区五区六区在线看| 神马午夜久久久| 今日头条成人一区二区三区四虎精品| 亚洲人妻熟妇三十三区| 91在线限制级| 中国小夫妻勾搭露脸淫荡对白| 素颜老阿姨乱情色| 伊人 俄罗斯 a v|