Mosquitto สามารถรองรับโบรกเกอร์หลายรายได้หรือไม่?


20

ฉันกำลังพิจารณาMosquittoสำหรับนายหน้าข้อความ MQTT สำหรับเครือข่าย IoT ที่บ้าน แต่ฉันกังวลว่านายหน้าอาจเป็นจุดเดียวของความล้มเหลวซึ่งสามารถทำลายเครือข่ายทั้งหมดของฉันถ้ามันล้มเหลวเนื่องจากข้อความทั้งหมดต้องผ่าน นายหน้าและไม่มีข้อความที่สามารถส่งได้เลยถ้านายหน้าไปออฟไลน์ด้วยเหตุผลใด ๆ (เช่นการถอดปลั๊กโดยไม่ตั้งใจ, ความล้มเหลวของฮาร์ดแวร์ ฯลฯ )

เป็นไปได้ไหมที่จะใช้หลายโบรกเกอร์ที่ติดตั้ง Mosquitto เพื่อปรับปรุงความน่าเชื่อถือของเครือข่าย หากเป็นไปได้มีข้อเสีย / ค่าโสหุ้ยอย่างมีนัยสำคัญในการใช้หลายโบรกเกอร์หรือไม่?

คำตอบ:


12

ใช่ Mosquitto รองรับหลายโบรกเกอร์

Mosquitto ใช้MQTT Bridgesเพื่อเชื่อมต่อโบรกเกอร์หลายรายดังนั้นการกำหนดเส้นทางข้อความระหว่างโบรกเกอร์ Mosquitto เหล่านี้ วิธีนี้จะสร้างสะพานเชื่อมระหว่างนายหน้าหลักของคุณกับระบบทางเลือก หลีกเลี่ยงการสร้างลูป หากโบรกเกอร์ทั้งสองให้ลูกค้าของคุณเผยแพร่ไปยังโบรกเกอร์หลักซึ่งจะเผยแพร่หัวข้อให้กับสมาชิกแต่ละรายและสมาชิกใด ๆ รวมถึงโบรกเกอร์รองที่เชื่อมโยง หากหลักล้มเหลวลูกค้าของคุณจะทราบ (ปฏิเสธการเชื่อมต่อเซิร์ฟเวอร์ไม่พร้อมใช้งาน) และสามารถเลือกที่จะเผยแพร่โดยตรงไปยังรอง (ฉันยังไม่แน่ใจว่าจะแก้ไขได้อย่างไร) เนื่องจากคุณไม่ได้คาดหวังว่าลูกค้าจะตัดการเชื่อมต่ออย่างไม่สุภาพฉันคิดว่า "Last Will and Testament" ไม่ได้ใช้ที่นี่ (จะใช้เพื่อแจ้งให้นายหน้าทราบ ในนามของลูกค้าที่ไม่ได้เชื่อมต่อ)

โพสต์นี้แสดงข้อเสียของวิธีการนี้โดยเฉพาะอย่างยิ่งเกี่ยวกับความสามารถในการปรับขนาดและความพร้อมใช้งาน:

  • กลไกการกำหนดเส้นทางบริดจ์ไม่ได้ปรับขนาดอย่างเหมาะสมหากคุณส่งต่อข้อความทั้งหมดไปยังบริดจ์อื่น
  • ค่าใช้จ่ายในการสื่อสารระหว่างบริดจ์นั้นมีความสำคัญหากคุณใช้ QoS 2 ระหว่างบริดจ์ (ซึ่งคุณต้องทำหากคุณต้องการเผยแพร่ข้อความระหว่างไคลเอนต์ที่เชื่อมต่อกับบริดจ์ที่แตกต่างกัน)
  • ไม่มีความล้มเหลวและความพร้อมใช้งานสูง หากนายหน้าสะพานล้มเหลวข้อความอาจหายไป
  • ไม่สามารถโอนย้ายไคลเอ็นต์ MQTT ไปยังโหนดบริดจ์อื่น เซสชัน MQTT จะไม่ถูกจำลองข้ามบริดจ์ดังนั้นคุณจะสูญเสียข้อความและการสมัครสมาชิกทั้งหมดหากคุณใช้เซสชันถาวร MQTT

10

ใน. NET การติดตั้งใช้งานช่วยให้ลูกค้าหนึ่งรายเชื่อมต่อกับโบรกเกอร์รายหนึ่งดังนั้นฉันจะบอกว่าทำไมไม่ ...

MqttClient mqtt;
string broker = ini.getData("MQTT", "hostname");
mqtt = new MqttClient(broker);
mqtt.MqttMsgPublishReceived += mqtt_received;
mqtt.Connect(Guid.NewGuid().ToString());

สิ่งนี้คือคุณต้องจัดการรายการซ้ำในกรณีที่มีทางเลือกอื่นเมื่อนายหน้ารายอื่นจะเริ่มส่งข้อความหรือเตือนลูกค้า

อาจมีความเป็นไปได้หลายอย่างเช่นนายหน้าแต่ละรายสมัครเป็นสมาชิกกันและตั้งค่าพินัยกรรมและพันธสัญญาสุดท้ายเพื่อเตือนตัวเองและลูกค้าว่าจะมีทางเลือกเกิดขึ้น!


นายหน้าซื้อขายสามารถสมัครหรือมากกว่าเช่นเชื่อมต่อกับโบรกเกอร์อื่นได้อย่างไร
Bence Kaulics

1
ฉันคิดถึงลูกค้าที่ซ้อนกันบนเซิร์ฟเวอร์ของโบรกเกอร์
Goufalite

@Goufalite มันมีประโยชน์จริง ๆ กับ MQTT โดยทั่วไปขอบคุณ คุณจะรู้เพิ่มเติมเกี่ยวกับMosquittoตัวแทนซื้อขายที่ฉันพูดถึงในคำถามหรือไม่
Aurora0001

นี่คือสิ่งที่ต่ำที่สุดที่ฉันรู้เกี่ยวกับ MQTT (ฉันไม่ได้ตระหนักว่ามีโบรกเกอร์อื่น ๆ เช่น HiveMQ ก่อนที่จะมากับ IoT SE) คุณต้องการรู้อะไรอีก คุณหมายถึงการนำไปปฏิบัติ
Goufalite

@Goufalite เพียงแค่สนใจว่า Mosquitto นั้นมีวิธีการบริหารโบรกเกอร์หลายตัวพร้อมกันหรือไม่ หากคุณสามารถแนะนำวิธีที่จะทำกับ Mosquitto หรือเอกสารประกอบการเชื่อมโยงที่จะดี
Aurora0001
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.