Mosquitto có thể hỗ trợ nhiều nhà môi giới không?


20

Tôi đã xem xét Mosquitto cho một nhà môi giới tin nhắn MQTT cho mạng IoT gia đình, nhưng tôi lo ngại rằng nhà môi giới đó có thể là một điểm thất bại duy nhất có thể làm sập toàn bộ mạng của tôi nếu thất bại, vì tất cả các tin nhắn đều phải thông qua người môi giới và không có tin nhắn nào có thể được truyền đi nếu người môi giới ngoại tuyến vì bất kỳ lý do gì (ví dụ: vô tình rút phích cắm, lỗi phần cứng, v.v.)

Có thể sử dụng nhiều nhà môi giới với Mosquitto được cài đặt để cải thiện độ tin cậy của mạng không? Nếu có thể, có bất kỳ nhược điểm / chi phí đáng kể nào khi sử dụng nhiều nhà môi giới không?

Câu trả lời:


12

Có, Mosquitto không hỗ trợ nhiều nhà môi giới.

Mosquitto sử dụng Cầu MQTT để kết nối nhiều nhà môi giới, do đó định tuyến tin nhắn giữa các nhà môi giới mosquitto này. Bằng cách này, một cầu nối giữa nhà môi giới chính của bạn với một hệ thống dự phòng có thể được thiết lập. Tránh tạo vòng lặp mặc dù. Nếu cả hai nhà môi giới điều hành khách hàng của bạn xuất bản cho nhà môi giới chính, sau đó sẽ xuất bản chủ đề cho từng người đăng ký, kể cả nhà môi giới thứ cấp được bắc cầu. Nếu lỗi chính, khách hàng của bạn sẽ lưu ý (Kết nối bị từ chối, Máy chủ không khả dụng) và có thể dự phòng trực tiếp để xuất bản lên phụ. (Tôi vẫn chưa chắc chắn cách khắc phục theo cách khác.) Vì bạn không mong muốn khách hàng ngắt kết nối một cách vô duyên Tôi nghĩ rằng "Di chúc cuối cùng và Di chúc" không được áp dụng ở đây thay mặt khách hàng bị ngắt kết nối).

Tuy nhiên, bài đăng này liệt kê những nhược điểm của phương pháp này, đặc biệt là về khả năng mở rộng và tính sẵn sàng:

  • Các cơ chế định tuyến cầu không mở rộng tốt nếu bạn chuyển tiếp tất cả các tin nhắn đến các cầu khác
  • Chi phí liên lạc giữa các cầu rất quan trọng nếu bạn đang sử dụng QoS 2 giữa các cầu (bạn cần thực hiện nếu bạn muốn truyền thông điệp giữa các máy khách được kết nối với các cầu khác nhau)
  • Không có chuyển đổi dự phòng và tính sẵn sàng cao. Nếu cầu môi giới gặp sự cố, tin nhắn có thể bị mất
  • Các máy khách MQTT không thể được di chuyển sang các nút cầu khác. Các phiên MQTT không được sao chép qua các cây cầu, vì vậy bạn sẽ mất tất cả các tin nhắn và đăng ký được xếp hàng nếu bạn đang sử dụng các phiên liên tục MQTT.

10

Trong .NET, việc triển khai cho phép kết nối một khách hàng với một nhà môi giới, vì vậy tôi sẽ nói tại sao không ...

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

Điều quan trọng là, bạn phải quản lý các bản sao trong trường hợp dự phòng khi nhà môi giới khác sẽ bắt đầu gửi tin nhắn hoặc cảnh báo khách hàng.

Có thể có một số khả năng như mỗi nhà môi giới đăng ký lẫn nhau và đặt Di chúc và Di chúc cuối cùng để cảnh báo chính họ và khách hàng của họ rằng dự phòng sẽ xảy ra!


Làm thế nào một nhà môi giới có thể đăng ký hoặc giống như kết nối với một nhà môi giới khác?
Bence Kaulics

1
Tôi đã nghĩ về một khách hàng được lồng trên máy chủ của broker.
Goufalite

@Goufalite, điều này thực sự hữu ích cho MQTT nói chung, cảm ơn. Bạn có tình cờ biết thêm về Mosquitto , nhà môi giới mà tôi đã thảo luận trong câu hỏi không?
Aurora0001

Đây là điều thấp nhất tôi biết về MQTT (Tôi đã không nhận ra có những nhà môi giới khác như HiveMQ trước khi đến với IoT SE). Còn điều gì bạn muốn biết không? Ý bạn là thực hiện?
Goufalite

@Goufalite chỉ quan tâm đến việc chính Mosquitto có cách điều hành nhiều nhà môi giới song song hay không. Nếu bạn có thể đề xuất một cách để làm điều đó với Mosquitto hoặc tài liệu liên kết sẽ rất tuyệt.
Aurora0001
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.