Konfigurowanie opcji klienta MQTT brokera
Ważne
To ustawienie wymaga zmodyfikowania zasobu brokera i można go skonfigurować tylko w początkowym czasie wdrażania przy użyciu interfejsu wiersza polecenia platformy Azure lub witryny Azure Portal. Nowe wdrożenie jest wymagane, jeśli wymagane są zmiany konfiguracji brokera. Aby dowiedzieć się więcej, zobacz Dostosowywanie domyślnego brokera.
Zaawansowane opcje klienta brokera kontrolują sposób interakcji brokera z klientami MQTT. Te ustawienia, wynegocjowane między brokerem a klientem podczas połączenia, obejmują wygaśnięcie sesji, wygaśnięcie komunikatu, maksymalny czas odbierania i utrzymywanie aktywności. Jedynym ustawieniem specyficznym dla operacji usługi Azure IoT jest limit kolejki subskrybentów.
Pełną listę dostępnych ustawień można znaleźć w dokumentacji interfejsu API ClientConfig .
W wielu scenariuszach domyślne ustawienia klienta są wystarczające. Aby zastąpić domyślne ustawienia klienta brokera, zmodyfikuj advanced.clients
sekcję w zasobie Broker. Obecnie to zastąpienie jest obsługiwane tylko przy użyciu flagi --broker-config-file
podczas wdrażania operacji usługi Azure IoT przy użyciu az iot ops create
polecenia .
Aby rozpocząć, przygotuj plik konfiguracji brokera w formacie JSON, tak jak w poniższym przykładzie:
{
"advanced": {
"clients": {
"maxSessionExpirySeconds": 282277,
"maxMessageExpirySeconds": 1622,
"subscriberQueueLimit": {
"length": 1000,
"strategy": "DropOldest"
},
"maxReceiveMaximum": 15000,
"maxKeepAliveSeconds": 300
}
}
}
Następnie wdróż operacje usługi Azure IoT przy użyciu az iot ops create
polecenia z flagą --broker-config-file
, podobnie jak następujące polecenie (inne parametry pominięte dla zwięzłości):
az iot ops create ... --broker-config-file <FILE>.json
Aby dowiedzieć się więcej, zobacz Obsługa interfejsu wiersza polecenia platformy Azure na potrzeby zaawansowanej konfiguracji brokera MQTT i przykładów brokera.
Limit kolejki subskrybenta
Broker MQTT przechowuje kolejkę dla każdego subskrybenta z komunikatami QoS 1 oczekującymi na dostarczenie. Komunikaty są dodawane do tej kolejki po odebraniu od wydawcy i usunięciu po dostarczeniu i potwierdzeniu przez subskrybenta za pomocą elementu PUBACK
. Jeśli komunikaty docierają szybciej niż subskrybent może je potwierdzić lub jeśli subskrybent jest w trybie offline z trwałą sesją, kolejka może rosnąć duże.
Broker może buforować te komunikaty na dysku , aby zapisać pamięć, ale może to nie zawsze być wystarczające. Bufor dysku może nie zostać skonfigurowany lub może być pełny ze względu na innych subskrybentów. W związku z tym limit kolejki subskrybenta pomaga zapobiec używaniu zbyt dużej ilości pamięci przez brokera dla pojedynczego subskrybenta.
Limit kolejki subskrybenta ma dwa ustawienia:
Długość: maksymalna liczba komunikatów, które można kolejkować dla pojedynczego subskrybenta. Jeśli kolejka jest pełna i pojawi się nowy komunikat, broker pominie komunikat w oparciu o skonfigurowaną strategię.
Strategia: Strategia, która ma być używana, gdy kolejka jest pełna. Dwie strategie to:
Brak: Komunikaty nie są porzucane , chyba że sesja wygaśnie, a kolejka może rosnąć w nieskończoność. To jest zachowanie domyślne.
DropOldest: najstarszy komunikat w kolejce jest porzucony.
Limit dotyczy tylko kolejki wychodzącej subskrybenta, która zawiera komunikaty, które nie zostały przypisane identyfikatory pakietów, ponieważ kolejka w locie jest pełna. Ten limit nie ma zastosowania do kolejki w locie.
Ponieważ limit jest stosowany na partycję zaplecza, broker nie może zagwarantować całkowitej liczby komunikatów wychodzących dla subskrybenta w całym klastrze. Na przykład ustawienie długości na 10 000 nie oznacza, że subskrybent otrzyma co najwyżej 10 000 komunikatów. Zamiast tego może odbierać maksymalnie 10,000 * number of partitions * number of backend workers
komunikaty.
Powolni subskrybenci
Powolny subskrybent jest taki, który nie może nadążyć za szybkością przychodzących komunikatów. Taka sytuacja może wystąpić, jeśli subskrybent powoli przetwarza komunikaty, jest rozłączony lub jest w trybie offline. Limit kolejki subskrybenta pomaga zapobiec powolnemu używaniu zbyt dużej ilości pamięci przez subskrybenta.
Wygaśnięcie wiadomości
Ustawienie maxMessageExpirySeconds
określa, jak długo komunikat może pozostać w kolejce, zanim wygaśnie. Jeśli komunikat pozostanie w kolejce dłużej niż maksymalny czas wygaśnięcia, zostanie oznaczony jako wygasły. Jednak wygasłe komunikaty są odrzucane tylko wtedy, gdy docierają do początku kolejki. Ten pasywny mechanizm wygasania pomaga zarządzać użyciem pamięci, zapewniając, że stare komunikaty zostaną ostatecznie usunięte.
Wygaśnięcie sesji
Ustawienie maxSessionExpirySeconds
działa z limitem kolejki subskrybenta, aby upewnić się, że komunikaty nie są przechowywane w kolejce przez czas nieokreślony. Jeśli sesja wygaśnie, wszystkie komunikaty w kolejce dla tej sesji zostaną porzucone. Pomaga to zapobiec używaniu zbyt dużej ilości pamięci przez wyczyszczenie całej kolejki w trybie offline.
Zarówno wygaśnięcie komunikatu, jak i wygaśnięcie sesji są ważne dla zarządzania powolnymi i offline subskrybentami oraz zapewnienia wydajnego użycia pamięci.