Wprowadzenie do protokołu AMQP
AMQP (Advanced Message Queuing Protocol) to protokół standardowy na warstwie aplikacji, który zapewnia zunifikowane usługi komunikacji i jest otwartym standardem dla protokołów warstwy aplikacji zaprojektowanych dla oprogramowania pośredniczącego na wiadomościach. AMQP to protokół sieciowy do przekazywania asynchronicznych wiadomości między procesami.
Klienci i oprogramowanie pośredniczące wiadomości oparte na tym protokole mogą dostarczać wiadomości bez ograniczeń ze strony różnych produktów klient/middleware, różnych języków rozwoju itp.
Główne cechy AMQP to zorientowanie się na komunikaty, kolejkowa, routing (w tym peer-to-peer i publikowanie/subskrypcja), niezawodność oraz bezpieczeństwo. AMQP egzekwuje zachowanie dostawców wiadomości i klientów, umożliwiając prawdziwą interoperacyjność między różnymi dostawcami.
AMQP i JMS
JMS był próbą standaryzacji wczesnego middleware wiadomości, był standaryzowany tylko na poziomie API i był daleki od zapewnienia interoperacyjności.
W przeciwieństwie do JMS, AMQP jest protokołem na poziomie przewodowym, który opisuje format danych przesyłanych przez sieć, płynących w bajtach. W rezultacie każde narzędzie przestrzegające tego formatu danych, które tworzy i interpretuje komunikaty, jest interoperacyjne z innymi kompatybilnymi narzędziami.
Skład rdzenia AMQP
Producent
Wiadomości produkcyjne.
ConnectionFactory
Fabryka produkująca Connection.
Połączenie
Połączenie, połączenie sieciowe aplikacji z Broker TCP/IP/Triple Handshake i Quad Wave.
Połączenia AMQP to zazwyczaj długie połączenia. AMQP to protokół warstwy aplikacji, który wykorzystuje TCP do zapewnienia niezawodnej dostawy. AMQP wykorzystuje mechanizmy uwierzytelniania i zapewnia ochronę TLS (SSL). Gdy aplikacja nie musi już łączyć się z proxy AMQP, musi z gracją zwolnić połączenie AMQP zamiast po prostu zamykać połączenie TCP.
Kanał
Kanał sieciowy to lekkie połączenie zbudowane na Połączeniu. Prawie wszystkie operacje wykonywane są w kanałach, które są kanałami do odczytu i zapisu wiadomości, a klienci mogą tworzyć pary dla każdego kanału, z których każdy reprezentuje zadanie sesyjne.
Jeśli połączenie porówna się do światłowodu, to kanał kanałowy jest porównywany do jednego z światłowodów w kablu światłowodowym. Na połączeniu można utworzyć dowolną liczbę kanałów.
Większość naszych operacji biznesowych odbywa się w interfejsie kanałowym, w tym:
- queueDeclare
- The exchangeDeclare dla przełącznika
- queueBind queueBind
- Publikuj wiadomość basicPublish
- Wiadomości konsumenckie, Konsumenty itd.
Pośrednik
Zaakceptuj połączenie klienta do implementacji usług AMQP ency, takich jak rabbitmq.
VirtualHost (hosting stron internetowych)
Wirtualny hosting, używany do izolacji logicznej, pozwala na posiadanie kilku central i kolejek, a ten sam wirtualny host nie może mieć giełd o tej samej nazwie.
Aby zaimplementować wiele izolowanych środowisk (użytkowników, grupy użytkowników, przełączniki, kolejki itp.) na jednym proxy, AMQP dostarcza koncepcję wirtualnych hostów (wirtualnych hostów – vhostów). Jest to bardzo podobne do koncepcji hostingu serwerów WWW, która zapewnia całkowicie izolowane środowisko dla podmiotów AMQP. Po nawiązaniu połączenia klient AMQP określa, którego wirtualnego hosta użyć.
Wymieniać
Przełącznik akceptuje wiadomości i wysyła je do powiązanej kolejki na podstawie klucza routingowego (bez możliwości przechowywania wiadomości).
Przełącznik to jednostka AMQP służąca do wysyłania wiadomości. Po otrzymaniu wiadomości przez przełącznik kieruje ją do jednej lub zerowej kolejki. Algorytm routingu, którego używa, jest określany przez typ przełącznika oraz reguły wiązania.
Typ przełącznika:
- Bezpośrednia wymiana
- Wymiana Fanout
- Wymiana tematów
- Wymiana nagłówków
Właściwości przełącznika:
- Nazwa: Nazwa przełącznika
- Trwałość: Flaga trwałości wskazująca, czy ten przełącznik jest utrzymany, czy nie
- Automatyczne usuwanie: Flaga Usuń, sygnalizującGdy wszystkie kolejki zostaną zakończone korzystając z tej wymiany, czy zostaną usunięte
- Argumenty: Zależne od samego agenta
Status przełącznika:
Trwałe przełączniki będą istnieć po ponownym uruchomieniu brokera, natomiast przełączniki etapowe nie będą (będą musiały zostać ponownie zadeklarowane po powrocie brokera do sieci).
Domyślny przełącznik
Domyślna giełda to w rzeczywistości bezpośrednia wymiana zadeklarowana przez brokera wiadomości i nie posiadająca nazwy (nazwa jest pustym ciągiem znaków).
Domyślny przełącznik można traktować jako specjalny przełącznik bezpośrednio podłączony. Domyślna nazwa przełącznika: Ciąg null (domyślny AMQP) Domyślny typ przełącznika: Przełącznik podłączony bezpośrednio
Podczas tworzenia kolejki, dopóki przełącznik, który ma być powiązany, nie jest określony, automatycznie zostanie on powiązany z domyślnym przełącznikiem, a nazwa klucza routingu w powiązaniu będzie taka sama jak nazwa kolejki.
Bezpośrednie połączenie ze zwrotnikiem
Przełącznik bezpośrednio podłączony dostarcza wiadomości do kolejki odpowiadających kluczy wiązających na podstawie klucza routingowego niesionego przez wiadomość. Trasowanie unicastowe używane przez przełącznik bezpośredni do obsługi wiadomości.
Podczas tworzenia kolejki, jeśli jest ona powiązana z bezpośrednim przełącznikiem, nie musi ona określać nazwy klucza routingowego, ponieważ będzie miała domyślną nazwę klucza routingowego, która jest taka sama jak nazwa Kolejki.
Kolejka przełączników bezpośrednio podłączonych zazwyczaj rozdziela zadania do wielu konsumentów w pętli (nazywamy to pollingiem).
Workflow:
- Przy wiązaniu kolejki ze switchem nadaj jej klucz wiążący, zakładając R;
- Gdy wiadomość z kluczem routingowym zostanie wysłana do przełącznika bezpośrednio podłączonego, przełącznik kieruje ją do kolejki z kluczem routingowym.
Przełączniki wentylatorowe
Przełącznik wentylatorowy kieruje wiadomości do wszystkich kolejek powiązanych z nim, niezależnie od klucza routingu powiązanego.
Jeśli N kolejek jest powiązanych z przełącznikiem sektorowym, gdy wiadomość zostanie wysłana do tego przełącznika, przełącznik wysyła kopię wiadomości do wszystkich N kolejek osobno. Przełączniki wentylatorowe są zazwyczaj używane do obsługi routingu wiadomości nadawczym.
Scenariusze zastosowań:
wiadomości nadawcze; Funkcja czatu grupowego.
Zmiana motywu
Zmiana tematu wysyła wiadomości do jednej lub więcej kolejek zgodnie z kluczem routingowym i typem giełdy, a często używamy jej do realizacji różnych subskrypcji publikuj/subskrybujących, czyli publikuj.
Zasady routingu dla przełączników bezpośrednio podłączonych są ściśle dopasowane, co oznacza, że klucz routingu musi pasować do klucza wiązającego przed wysłaniem wiadomości do kolejki. Zasady routingu zmiany tematu to rozmyte dopasowania, które można uzyskać, spełniając niektóre zasady za pomocą dzikich kart.
Określa ona:
- W kluczu wiązania mogą być dwa specjalne znaki * oraz # dla dopasowania rozmytego. gdzie * służy do dopasowania słowa, #用于匹配多个单词 (może być zerem)
- Klucz routingowy to ciąg oddzielony od kropek (każdy pojedynczy ciąg oddzielony kropką nazywamy słowem)
- Gdy producent wysyła wiadomość Klucz Routing=A.A.A, spełnione jest tylko A.*.* i będzie kierowana tylko do kolejki 1.
- Gdy producent wysyła wiadomość, Klucz Routing=A.B.A, spełniające A.*.* i *.B.* zostaną przekierowane do kolejki 1 i kolejki 2.
- Gdy producent wysyła wiadomość Klucz Routing=A.B.C, wtedy A.*.* oraz *.B.* i *.* są spełnione. C jest kierowany do kolejki1, kolejki 2, kolejki 3.
Scenariusze zastosowań:
- aktualizacje wiadomości dotyczące kategorii lub tagów;
- Zadania w tle wykonywane przez wielu pracowników, z których każdy odpowiada za wykonanie określonych zadań.
Przełącznik głowicy
Przełączniki nagłówków nie polegają na regułach dopasowania klucza routingowego do powiązania kluczy do routowania wiadomości, lecz dopasowują je na podstawie atrybutu nagłówków zawartego w treści wysłanej wiadomości.
Przełączniki głowicowe można uznać za kolejną manifestację przełącznika bezpośrednio podłączonego. Jednak klucz routingu przełącznika bezpośredniego musi być ciągiem znaków, a wartości atrybutów nagłówka nie są przez to ograniczone, mogą być nawet liczbami całkowitymi lub wartościami skrótu (słowniki) itd. Większa elastyczność (ale w praktyce rzadko używamy przełączników głowy).
Workflow:
- Gdy kolejka jest powiązana ze przełącznikiem nagłówków, wiele nagłówków jest powiązanych jednocześnie w celu dopasowania.
- Przychodzące wiadomości mają nagłówek oraz parametr "x-match". Gdy "x-match" jest ustawione na "any", można dopasować dowolną wartość nagłówka, a gdy "x-match" jest ustawione na "all", wszystkie wartości nagłówka muszą być dopasowane.
Podsumowanie zmiany
Wiążący
Wirtualne połączenie między Exchange a Queue.
BindingKey to opis reguły dla powiązań Exchange i Queue. Klucz wiążący określa, jaki rodzaj klucza routingu zostanie przypisany do obecnie powiązanej kolejki w ramach bieżącej wymiany.
Klucz do trasowania
Reguły routowania, których maszyna wirtualna może wykorzystać do określenia, jak kierowywać konkretną wiadomość.
Klucz wiązania vs. klucz routingowy
- Klucz wiązania to klucz łączący kolejkę z przełącznikiem;
- Klucz routingu to informacja wysyłana przez producenta do przełącznika;
- Gdy klucz wiązania i klucz routowania się zgadzają, umieść wiadomość w odpowiadającej mu kolejce.
Klucz Binding to opis reguły dotyczący wiązania Exchange i Queue, który służy do analizy, gdy Exchange otrzymuje wiadomość; wiadomość odebrana przez Exchange będzie miała pole Klucza Routingu, a Exchange dopasowuje ten Klucz Routingu do wszystkich kluczy wiążących aktualnej Exchange, a jeśli wymagania zostaną spełnione, zostanie on wysłany do Binding Klucz jest powiązany z kolejką, aby wysłać wiadomość.
Klucz powiązania vs. Klucz routowania w różnych przełącznikach
Domyślny przełącznik: Binding Key to nazwa kolejki, której nie można dostosować. Klucz routingu jest także nazwą kolejki, zanim może zostać pomyślnie przekierowana do kolejki Przełącznik bezpośredniego połączenia: Klucz wiązania to nazwa kolejki, którą można dostosować. Klucze routingowe mogą być skutecznie kierowane do kolejki tylko wtedy, gdy Klucz Binding jest taki sam Przełącznik wentylatora: Brak klucza wiązającego; Oczywiście, nie ma Klucza Rutowania. Automatycznie kierowane do wszystkich kolejek powiązanych z przełącznikiem Przełącznik motywu: niestandardowy Binding; Dostosuj klucz do trasowania. Klucz routing==Klucz wiązający, a dopasowanie rozmyte musi zostać pomyślnie przekierowane do kolejki Przełącznik głowy: bez klucza wiązania; Oczywiście, nie ma Klucza Rutowania. Dopasowywania na podstawie atrybutu nagłówków w treści wysłanej wiadomości
Kolejka
Przechowuje wiadomości, które zaraz zostaną zużyte przez aplikację.
Właściwości kolejki:
- Nazwa: Nazwa kolejki
- Trwałość: Kolejka nadal istnieje po ponownym uruchomieniu brokera wiadomości
- Ekskluzywne: Używane tylko przez jedno połączenie, a kolejka jest usuwana po zamknięciu połączenia
- Automatyczne usuwanie: Usuwane, gdy ostatni konsument wypisuje się
- Argumenty: Niektórzy brokerzy wiadomości używają go do wykonywania dodatkowych funkcji podobnych do TTL
Tworzenie kolejki: Kolejki mogą być używane dopiero po ich zadeklarowaniu. Jeśli kolejka jeszcze nie istnieje, jej zadeklarowanie ją tworzy. Jeśli zadeklarowana kolejka już istnieje, a atrybuty są identyczne, deklaracja nie ma wpływu na oryginalną kolejkę. Jeśli atrybuty w deklaracji różnią się od tych w istniejącej kolejce, wyrzucany jest wyjątek na poziomie kanału z kodem błędu 406.
Trwałość kolejki: Kolejka trwałości jest przechowywana na dysku i pozostaje tam po ponownym uruchomieniu brokera. Kolejki, które nie są utrwalane, nazywane są kolejkami przejściowymi. Nie wszystkie scenariusze i sprawy wymagają trwałości w kolejce.
Kolejka trwała nie sprawia, że wiadomości kierowane do niej są trwałe. Jeśli agent wiadomości się rozłączy i zostanie ponownie uruchomiony, kolejka trwałości zostanie ponownie zadeklarowana podczas restartu, a w każdym przypadku można przywrócić tylko wiadomości trwałe.
Konsument
Wiadomości konsumenckie. W AMQP konsumenci mogą otrzymać oczekujące wiadomości na dwa sposoby:
Middleware wiadomości dostarcza wiadomości konsumentom (push API) Konsumenci aktywnie otrzymują wiadomości (pull API) Uwaga: Gdy wielu konsumentów słucha tej samej kolejki, komunikaty w kolejce będą konsumowane tylko przez jednego z nich (nie raz dla każdego konsumenta)
Komunikat
Dane przesyłane między wiadomościami, usługami i aplikacjami składają się z właściwości i ciał.
Atrybuty modyfikują wiadomości, takie jak priorytet wiadomości, opóźnienie i inne zaawansowane funkcje, a główną treść stanowi treść treści wiadomości.
Właściwości wiadomości:
- Typ treści
- Kodowanie treści
- Klucz trasujący
- Tryb dostarczania (trwały lub nie)
- Tryb dostarczania (trwały lub nietrwały)
- Priorytet wiadomości
- Znacznik czasu publikacji wiadomości
- Okres ważności
- ID aplikacji wydawcy
Sedno wiadomości: Oprócz atrybutów, wiadomości AMQP zawierają także ładunek (dane, które faktycznie przenoszą), który proxy AMQP traktuje jako nieprzezroczystą tablicę bajtów.
Broker wiadomości nie inspekcjonuje ani nie modyfikuje ładunku. Wiadomości mogą zawierać tylko atrybuty, nie przenosząc ładunku. Zazwyczaj wykorzystuje dane w formacie serializowanym, takim jak JSON, a aby zaoszczędzić pieniądze, protokołu i MessagePacki serializują dane strukturalne do publikacji jako ładunek wiadomości. AMQP i jego odpowiednicy zazwyczaj używają pól "typ treści" i "kodowanie treści" do komunikacji z wiadomościami w celu identyfikacji ładunków, ale opiera się to wyłącznie na konwencjach.
Trwałość wiadomości: Wiadomości są publikowane w sposób trwały, a agent AMQP przechowuje tę wiadomość na dysku. Jeśli serwer zostanie zrestartowany, system potwierdza, że otrzymany komunikat o trwałości nie został utracony.
Samo wysłanie wiadomości do przełącznika trwałego lub przekierowanie jej do kolejki persisted nie sprawia, że wiadomość jest trwała: trwałość wiadomości zależy całkowicie od trybu trwałości samej wiadomości.
Publikowanie wiadomości w sposób trwały może mieć wpływ na wydajność.
Proces pracy AMQP
Wydawca publikuje wiadomość za pośrednictwem Giełdy.
Przełącznik rozdziela przychodzące wiadomości do kolejki powiązanej z przełącznikiem zgodnie z regułami routingu.
Na koniec agent AMQP przekazuje wiadomość konsumentowi, który subskrybował tę kolejkę, lub sam otrzyma ją w razie potrzeby.
Mechanizm wiadomości AMQP
Potwierdzenie wiadomości
Konsumenci czasami nie przetwarzają komunikatów lub czasem dochodzą do bezpośredniego zawieszenia. A powody sieciowe również mogą powodować różne problemy. To stawia pytanie, kiedy jest właściwy moment, aby agenci AMQP usuwali wiadomości.
Dwa tryby potwierdzania wiadomości AMQP:
Tryb automatycznego potwierdzenia: Usuń wiadomość natychmiast po wysłaniu jej do konsumenta przez middleware wiadomości. (Używając metody AMQP: basic.deliver lub basic.get-ok) Tryb wyraźnego potwierdzenia: Czekaj, aż konsument wyśle potwierdzenie, zanim usuniesz wiadomość. (Używając metody AMQP: basic.ack) Jeśli konsument rozłączy się bez przesłania potwierdzenia, agent AMQP przekazuje wiadomość ponownie innemu odbiorcy. Jeśli w tym momencie nie ma dostępnych konsumentów, broker wiadomości czeka na rejestrację kolejnego konsumenta w tej kolejce, a następnie próbuje ponownie dostarczyć zamówienie.
Wiadomości odrzucone
Gdy konsument otrzyma wiadomość, proces przetwarzania może się powiódć lub zakończyć niepowodzeniem. Konsument może zgłosić brokerowi wiadomości (middleware wiadomości), że wiadomość nie została przetworzona (lub nie została ukończona w tym momencie) z powodu "odrzuconej wiadomości". Gdy wiadomość zostanie odrzucona, konsument może powiedzieć brokerowi wiadomości, co ma z nią zrobić – zniszczyć ją lub przywrócić do kolejki.
Gdy w kolejce jest tylko jeden konsument, upewnij się, że nie odrzucasz wiadomości i wybierasz jej z powrotem do kolejki, powodując, że wiadomość będzie się zapętlać w nieskończoność na tym samym konsumencie.
W AMQP metoda basic.reject służy do odrzucania wiadomości. Jednak basic.reject ma ograniczenie: nie można go użyć do odrzucenia wielu wiadomości z potwierdzeniami. Ale jeśli używasz RabbitMQ, możesz użyć rozszerzenia AMQP 0-9-1 zwanego negatywnymi potwierdzeniami (zwanymi też nacks), aby rozwiązać ten problem.
Oryginał:Logowanie do linku jest widoczne.
|