W jaki sposób EMQ utrzymuje komunikaty QoS 1/2?

10

EMQ (Erlang MQTT Broker) jest „rozpowszechniane masowo skalowalnych, wysoce rozciągliwy wiadomość MQTT broker” o zgłoszonych „1,3 miliona jednoczesnych połączeń MQTT” - tak to potencjalnie pozwala na dużą liczbę klientów do publikowania i do niej zapisać. Wydaje się prawdopodobne, że niektórzy klienci mogą zostać odłączeni w dowolnym momencie.

Jako to pytanie Co się stanie, jeśli w Mosquitto zabraknie pamięci do przechowywania wiadomości QoS 1/2? pyta o Mosquitto:

W MQTT komunikaty z QoS 1 lub 2 muszą być dostarczone co najmniej raz (komunikaty QoS 2 muszą być dostarczone dokładnie raz). Jeśli klient nie jest połączony, broker musi przechowywać wiadomość, dopóki klient nie będzie gotowy do jej odebrania.

Więc w jaki sposób EMQ utrzymuje komunikaty QoS 1/2 do czasu dostarczenia, tj. Ponownego uruchomienia brokera lub w odniesieniu do limitów pamięci?

Ghanima
źródło
Powiązane: iot.stackexchange.com/q/809/54
Ghanima

Odpowiedzi:

6

Więc w jaki sposób EMQ utrzymuje komunikaty QoS 1/2 do czasu dostarczenia, tj. Ponownego uruchomienia brokera lub w odniesieniu do limitów pamięci?

Odpowiedź wydaje się brzmieć: tak nie jest . Ten problem na ich trackerze błędów mówi:

Mam do czynienia z problemem przechowywania trwałych sesji klienta po ponownym uruchomieniu brokera. Czy ta funkcja obecnie nie występuje w brokerze lub brakuje mi konfiguracji?

Broker nie będzie trwał sesji.

Ponadto, po przejrzeniu kilku kolejnych problemów, znalazłem ten raport :

Początkowo ustawiłem maksymalną liczbę klientów na 1000 KB w emqttd.config. Nasze urządzenie ma 8 GB pamięci z 4 rdzeniami, jestem w stanie łatwo podłączyć 120K współbieżnych połączeń, ale kiedy przekroczy 8 GB pamięci, emqttd kończy się. To, co myślałem, że jest ustawiony maksymalny klient na maszynę byłoby znacznie lepsze.

Zasadniczo od wersji 2.0.5:

  • Wydaje się, że wiadomości nie są utrwalane w pliku.
  • Gdy brokerowi skończy się pamięć, po prostu się zawiesi.

Nie do końca idealne, ale wydaje się, że takie jest obecne zachowanie, więc jeśli utrwalanie komunikatów ma krytyczne znaczenie dla twojego przypadku użycia, użyj innego brokera.

Aurora0001
źródło
1
Wydaje się to być dziwne (co najmniej) dla masowo skalowalnego brokera mqtt.
Ghanima,
Jeśli szukasz rozproszonego brokera MQTT, który utrzymuje komunikaty QoS1 / 2 na dysku (przy użyciu LevelDB), to może zajrzyj na VerneMQ ( vernemq.com ).
Lars Hesel Christensen
Mmmh, chociaż emqtt nie przechowuje wiadomości samodzielnie, może być podłączony do wielu baz danych, więc zakładam, że tak właśnie działa. Sprawdziłeś to?
Fabien Papleux