国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次

這篇具有很好參考價值的文章主要介紹了paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

項目需求:原本做的項目是單進程單線程模式訂閱mqtt,發(fā)現在消息回調處理消息時耗時較久,我們業(yè)務對消息處理是一次性的,只要求處理一次,所以需要提升并發(fā)處理能力??戳司W上建議改為多線程模式,然而本人實踐過程,采用多進程or多線程模式方式運行,發(fā)現并沒達到預期效果。下面時本人的一下實踐記錄,僅供參考學習。

環(huán)境:python3.7

本地mqtt服務使用的emqx

操作工具用的MQTTX客戶端

?1、下面是mqtt多線程模式運行代碼實現,只實現消息訂閱端。

import random, string
from paho.mqtt.client import Client
from threading import Thread

broker = '192.168.8.205'
port = 1883
topic = "python-mqtt"


def connect_mqtt():
    def on_connect(_, __, ___, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client_id = f"test-client_{''.join(random.choice(string.ascii_lowercase) for _ in range(4))}"
    client = Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client


def subscribe(client):
    def on_message(_, __, mesgage):
        print(f"Received `{mesgage.payload.decode()}` from `{mesgage.topic}` topic\n")
    client.subscribe(topic)
    client.on_message = on_message


def main():
    c = connect_mqtt()
    subscribe(c)
    c.loop_forever()
    # c.loop_start()


if __name__ == '__main__':

    lt = []
    for i in range(10):
        t = Thread(target=main, args=(), name=f'thread-{i}')
        lt.append(t)
    for t in lt:
        t.start()
        print(t.name)
    for t in lt:
        t.join()

?2、MQTTX連接發(fā)送消息:

paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次

?3、運行效果,發(fā)現發(fā)布一條消息可以被接收10次(訂閱客戶端10個,分別被處理了10次),而我的需求是想要發(fā)布一條消息,被這個10個客戶端之一消費掉,且只處理一次。

代碼參考前文,修改如下

paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次

paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次

?4、后來又換個思路,嘗試了下還是10個線程,客戶端唯一(client_id唯一),這種模式由于mqtt協議要求客戶端唯一,導致10個線程并發(fā)啟動,出現搶占式連接mqqt服務,出現不停的斷開連接,重新連接。這種模式下運行客戶端實際也只有一個,訂閱處理等能力同于一個線程模式下的客戶端方式,也無法達到預期。

paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次

-----------------------------------------------分割線-------------------------------?

后面無意間找到一篇文章,了解到mqtt服務有一種叫共享訂閱模式。以emqx為例,emqx支持兩種格式的共享訂閱前綴:$share/topic 和$queue/topic,然后通過修改emqx服務的配置etc/emqx.conf

如圖:paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次

消息發(fā)布時,topic配置不變,訂閱時,沿用$share/topic 和$queue/topic即可。

代碼參考前文修改如下:

paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次

?運行效果:

paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次

?可以看到程序運行只收到一條消息了paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次

?參考文章:

? ?1.(mqtt集群訂閱如何只消費一個(一次)消息? - 程序新視界)

? ?2.(paho-mqtt 實現通信_nuc_baixu的博客-CSDN博客_paho mqtt)文章來源地址http://www.zghlxwxcb.cn/news/detail-432557.html

到了這里,關于paho-mqtt實現多客戶端訂閱一個主題,并保證消息只被接收一次的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 一文搞懂MQTT,如何在SpringBoot中使用MQTT實現消息的訂閱和發(fā)布&MQTT 客戶端重連

    一文搞懂MQTT,如何在SpringBoot中使用MQTT實現消息的訂閱和發(fā)布&MQTT 客戶端重連

    簡介: 之前介紹了RabbitMQ以及如何在SpringBoot項目中整合使用RabbitMQ,看過的朋友都說寫的比較詳細,希望再總結一下目前比較流行的MQTT。所以接下來,就來介紹什么MQTT?它在IoT中有著怎樣的作用?如何在項目中使用MQTT? 之前介紹了RabbitMQ以及如何在SpringBoot項目中整合使用

    2024年02月05日
    瀏覽(22)
  • MQTT記錄(概述,docker部署,基于spring-integration-mqtt實現消息訂閱與發(fā)布,客戶端工具測試)

    MQTT記錄(概述,docker部署,基于spring-integration-mqtt實現消息訂閱與發(fā)布,客戶端工具測試)

    需要spring-boot集成spring-integration-mqtt代碼的直接跳到第5部分 1.1 MQTT是什么呢? message queue telemetry translation 是一種基于發(fā)布與訂閱的輕量級消息傳輸協議.適用于低帶寬或網絡不穩(wěn)定的物聯網應用.開發(fā)者可以使用極少的代碼來實現物聯網設備之間的消息傳輸.mqtt協議廣泛應用于物

    2024年02月12日
    瀏覽(20)
  • MQTT 客戶端出現連接訂閱等問題時如何排查?

    大家好,這是一期社區(qū)專題 FAQ。我們整理了近期社區(qū)中關注度較高的問題,在這里進行統(tǒng)一匯總解答。 今后本系列內容將不定期推送,敬請關注。 同時,如果大家在使用 EMQX 的過程中遇到問題,歡迎通過以下方式進行解決: 查閱 EMQX 產品文檔與博客文章。 如果在現有資料

    2023年04月20日
    瀏覽(21)
  • mqtt服務器搭建與qt下的mqtt客戶端實現

    mqtt服務器搭建與qt下的mqtt客戶端實現

    ??MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一個基于客戶端-服務器的消息發(fā)布/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。在很多情況下,包括受限的環(huán)境中,如:機器與機器(M2M)通信和物聯網(Io

    2024年02月06日
    瀏覽(25)
  • Android 實現MQTT客戶端,用于門禁消息推送

    添加MQTT依賴 implementation ‘org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.2’ implementation ‘org.eclipse.paho:org.eclipse.paho.android.service:1.1.1’ 在Manifest清單文件中添加服務 MqttClient的實現方式 MQTT初始化連接線程,實現與服務器的連接、訂閱、發(fā)布消息 MQTT重連 MQTT斷開 發(fā)送消息 MqttAndroid

    2024年02月14日
    瀏覽(20)
  • SpringBoot集成Milo庫實現OPC UA客戶端:連接、遍歷節(jié)點、讀取、寫入、訂閱與批量訂閱

    SpringBoot集成Milo庫實現OPC UA客戶端:連接、遍歷節(jié)點、讀取、寫入、訂閱與批量訂閱

    前面我們搭建了一個本地的 PLC 仿真環(huán)境,并通過 KEPServerEX6 讀取 PLC 上的數據,最后還使用 UAExpert 作為OPC客戶端完成從 KEPServerEX6 這個OPC服務器的數據讀取與訂閱功能。在這篇文章中,我們將通過 SpringBoot 集成 Milo 庫實現一個 OPC UA 客戶端,包括連接、遍歷節(jié)點、讀取、寫入

    2024年02月09日
    瀏覽(28)
  • mqtt安卓客戶端

    1.MQTT(消息隊列遙測傳輸協議),是一種基于 發(fā)布/訂閱 (publish/subscribe)模式的\\\"輕量級\\\"通訊協議, 該協議構建于TCP/IP協議上 。MQTT最大優(yōu)點在于,可以以極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務。作為一種低開銷、低帶寬占用的即時通訊協議,使

    2024年02月10日
    瀏覽(21)
  • 【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

    【MQTT】MQTT簡介+安裝+使用 python MQTT客戶端

    目錄 前言 MQTT 協議簡介 為何選擇 MQTT MQTT 通訊運作方式 MQTT 協議幀格式 MQTT服務器搭建和使用? 公共MQTT 測試服務器 MQTT服務器搭建 各種MQTT代理服務程序比較 Mosquitto安裝 MQTT使用方法 測試MQTT服務器 程序中使用MQTT 本文隨時更新,轉載請注明出處,源地址:http://t.csdn.cn/kCC0B 文

    2024年02月01日
    瀏覽(91)
  • MQTT 客戶端 MQTT.fx 使用說明

    MQTT 客戶端 MQTT.fx 使用說明

    官網:https://softblade.de/en/download-2/ 說明:最后的免費版本是 MQTT.fx 1.7.1,官網已經沒有免費的版本 下載 MQTT.fx 1.7.1 https://nowjava.com/download/44364 【需關注其公眾號才能下載】 一路 Next 即可 安裝好后,直接啟動MQTT.fx 點擊第 1 步中界面設置按鍵(齒輪圖標)打開新窗口創(chuàng)建一個

    2024年02月03日
    瀏覽(18)
  • 通過Milo實現的OPC UA客戶端連接并訂閱Prosys OPC UA Simulation Server模擬服務器

    通過Milo實現的OPC UA客戶端連接并訂閱Prosys OPC UA Simulation Server模擬服務器

    前面我們搭建了一個本地的 PLC 仿真環(huán)境,并通過 KEPServerEX6 讀取 PLC 上的數據,最后還使用 UAExpert 作為 OPC 客戶端完成從 KEPServerEX6 這個OPC服務器的數據讀取與訂閱功能:SpringBoot集成Milo庫實現OPC UA客戶端:連接、遍歷節(jié)點、讀取、寫入、訂閱與批量訂閱。 注意,如果實際工

    2024年02月16日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包