Klient AMQP 1.0.0 dla Delphi

· Komponenty

Od sgcWebSockets 2024.2.0 obsługiwany jest AMQP 1.0.0.

AMQP (Advanced Message Queuing Protocol) 1.0.0 to protokół wiadomości zaprojektowany z myślą o niezawodnej, asynchronicznej komunikacji między systemami rozproszonymi. Ułatwia wymianę wiadomości między aplikacjami i komponentami w sposób odseparowany, pozwalając im komunikować się bez bezpośrednich zależności. 

Ogólnie rzecz biorąc, AMQP 1.0.0 zapewnia ustandaryzowany i interoperacyjny sposób komunikacji różnych komponentów i systemów w luźno powiązany sposób, dzięki czemu sprawdza się w wielu zastosowaniach rozproszonych i na poziomie korporacyjnym. 

Funkcje AMQP

Konfiguracja

Klient AMQP 1.0.0 udostępnia właściwość AMQPOptions, w której konfigurujesz połączenie.

Uwierzytelnianie AMQP konfigurujesz we właściwości Authentication.

Połączenie

 Połączenie zaczyna się od tego, że klient (zazwyczaj aplikacja lub usługa wymiany wiadomości) inicjuje połączenie TCP do serwera (brokera wiadomości). Klient łączy się z portem serwera — zwykle 5672 dla połączeń bez TLS i 5671 dla połączeń zabezpieczonych TLS. Po nawiązaniu połączenia TCP klient i serwer negocjują wersję protokołu AMQP, której będą używać. AMQP 1.0.0 obsługuje różne wersje, a podczas negocjacji obie strony uzgadniają użycie wersji 1.0.0.

Po negocjacji protokołu klient może musieć się uwierzytelnić wobec serwera, w zależności od konfiguracji serwera. Mechanizmy uwierzytelniania mogą obejmować mechanizmy SASL (Simple Authentication and Security Layer) takie jak PLAIN, EXTERNAL lub inne obsługiwane przez serwer.

Przykład: połączenie z serwerem AMQP nasłuchującym na bezpiecznym porcie 5671 z użyciem poświadczeń SASL

// Creating AMQP client
oAMQP := TsgcWSPClient_AMQP1.Create(nil);
// Setting AMQP authentication options
oAMQP.AMQPOptions.Authentication.AuthType := amqp1authSASLPlain;
oAMQP.AMQPOptions.Authentication.Username := 'sgc';
oAMQP.AMQPOptions.Authentication.Password := 'sgc';
// Creating WebSocket client
oClient := TsgcWebSocketClient.Create(nil);
// Setting WebSocket specifications
oClient.Specifications.RFC6455 := False;
// Setting WebSocket client properties
oClient.Host := 'www.esegece.com';
oClient.Port := 5671;
oClient.TLS := True;
// Assigning WebSocket client to AMQP client
oAMQP.Client := oClient;
// Activating WebSocket client
oClient.Active := True; 

Sesje

Po uwierzytelnieniu klient otwiera sesję AMQP. Sesja to logiczny kontekst komunikacji między klientem a serwerem. Sesje służą do grupowania powiązanych operacji wymiany wiadomości. Aby utworzyć nową sesję, użyj metody CreateSession; metoda pozwala podać nazwę sesji lub pozostawić ją pustą — wtedy komponent przypisze ją automatycznie.

Jeśli sesja została utworzona pomyślnie, zostanie wywołane zdarzenie OnAMQPSessionOpen ze szczegółami sesji. 

AMQP1.CreateSession('MySession');
procedure AMQP1AMQPSessionOpen(Sender: TObject; const aSession: TsgcAMQP1Session; 
  const aBegin: TsgcAMQP1FrameBegin);
begin
  ShowMessage('#session-open: ' + aSession.Id);
end; 

Łącza

W obrębie sesji klient tworzy łącza, aby komunikować się z konkretnymi obiektami, takimi jak kolejki, tematy lub inne zasoby udostępniane przez serwer. Łącza to dwukierunkowe kanały komunikacyjne służące do wysyłania i odbierania wiadomości.

Komponent może działać jako węzeł nadawcy i odbiorcy. Pozwala utworzyć dowolną liczbę łączy dla każdej sesji, aż do limitu określonego we właściwości MaxLinksPerSession

Łącza nadawcze

Aby utworzyć nowe łącze nadawcze, użyj metody CreateSenderLink i przekaż nazwę sesji oraz opcjonalnie nazwę łącza. Jeśli łącze zostanie utworzone pomyślnie, zostanie wywołane zdarzenie OnAMQPLinkOpen.

AMQP1.CreateSenderLink('MySession', 'MySenderLink');
procedure procedure TfrmClientAMQP1.AMQP1AMQPLinkOpen(Sender: TObject; 
  const aSession: TsgcAMQP1Session; const aLink: TsgcAMQP1Link; const aAttach: TsgcAMQP1FrameAttach);
begin
  ShowMessage('#link-open: ' + aLink.Name);
end; 

Łącza odbiorcze

Aby utworzyć nowe łącze odbiorcze, użyj metody CreateReceiverLink i przekaż nazwę sesji oraz opcjonalnie nazwę łącza. Jeśli łącze zostanie utworzone pomyślnie, zostanie wywołane zdarzenie OnAMQPLinkOpen

AMQP1.CreateReceiverLink('MySession', 'MyReceiverLink');
procedure procedure TfrmClientAMQP1.AMQP1AMQPLinkOpen(Sender: TObject; 
  const aSession: TsgcAMQP1Session; const aLink: TsgcAMQP1Link; const aAttach: TsgcAMQP1FrameAttach);
begin
  ShowMessage('#link-open: ' + aLink.Name);
end; 

Wysyłanie wiadomości

Po nawiązaniu sesji i utworzeniu łączy klient może rozpocząć operacje na wiadomościach, np. wysyłanie wiadomości do miejsca docelowego. Aby wysłać wiadomość przez łącze nadawcze, użyj metody SendMessage. 

AMQP1.SendMessage('MySession', 'MySenderLink', 'My first AMQP Message'); 

Odbieranie wiadomości

Domyślnie łącza odbiorcze są tworzone w trybie automatycznym, co oznacza, że każda nowa wiadomość będzie dostarczana do klienta.

Jeśli łącze odbiorcze utworzono w trybie ręcznym, użyj synchronicznej metody GetMessage, aby pobrać wiadomość i poczekać na nadejście kolejnej.

Zarówno w trybie automatycznym, jak i ręcznym przy każdej nowej wiadomości wywoływane jest zdarzenie OnAMQPMessage

procedure OnAMQPMessageEvent(Sender: TObject; const aSession:
    TsgcAMQP1Session; const aLink: TsgcAMQP1ReceiverLink; const aMessage:
    TsgcAMQP1Message; var DeliveryState: TsgcAMQP1MessageDeliveryState);
begin
  ShowMessage(aMessage.ApplicationData.AMQPValue.Value);
end; 

Dokumentacja

Klient AMQP1 dla Delphi

Dowiedz się więcej o kliencie AMQP 1.0.0 dla Delphi / C++ Builder https://www.esegece.com/help/sgcWebSockets/pl/#t=Components%2FProtocols%2FSubprotocols%2FAMQP1%2FProtocol_AMQP1.htm

Pobierz demo

Pobierz demonstracyjnego klienta AMQP 1.0.0 skompilowanego dla Windows z użyciem biblioteki sgcWebSockets.