AMQP 1.0.0 Delphi İstemcisi

· Bileşenler

sgcWebSockets 2024.2.0'dan itibaren AMQP 1.0.0 desteklenmektedir.

AMQP (Advanced Message Queuing Protocol) 1.0.0, dağıtık sistemler arasında güvenilir, asenkron iletişim için tasarlanmış bir mesajlaşma protokolüdür. Uygulamalar veya bileşenler arasında mesaj alışverişini ayrıştırılmış bir şekilde kolaylaştırır ve doğrudan bağımlılıklar olmadan iletişim kurmalarına olanak tanır. 

Genel olarak AMQP 1.0.0, farklı yazılım bileşenleri ve sistemlerin gevşek bir şekilde bağlı olarak iletişim kurması için standartlaştırılmış ve birlikte çalışabilir bir yol sağlar; bu da onu çeşitli dağıtık ve kurumsal düzeyde uygulamalar için uygun kılar. 

AMQP Özellikleri

Yapılandırma

AMQP 1.0.0 istemcisi, bağlantıyı yapılandırabileceğiniz AMQPOptions özelliğine sahiptir.

AMQP Kimlik Doğrulaması, Authentication özelliğinde yapılandırılmalıdır.

Bağlantı

 Bağlantı, istemcinin (genellikle bir mesajlaşma uygulaması veya hizmeti) sunucuya (mesaj broker'ı) bir TCP bağlantısı başlatmasıyla başlar. İstemci, sunucunun bağlantı noktasına bağlanır; TLS olmayan bağlantılar için tipik olarak 5672 ve TLS ile güvence altına alınmış bağlantılar için 5671. TCP bağlantısı kurulduğunda, istemci ve sunucu kullanacakları AMQP protokol sürümünü müzakere eder. AMQP 1.0.0 çeşitli sürümleri destekler ve müzakere sırasında her iki taraf da 1.0.0 sürümünü kullanmayı kabul eder.

Protokol müzakeresinden sonra, sunucunun yapılandırmasına bağlı olarak istemcinin kendisini sunucuya doğrulaması gerekebilir. Kimlik doğrulama mekanizmaları, PLAIN, EXTERNAL gibi SASL (Simple Authentication and Security Layer) mekanizmalarını veya sunucu tarafından desteklenen diğerlerini içerebilir.

Örnek: 5671 güvenli bağlantı noktasını dinleyen ve SASL kimlik bilgilerini kullanan AMQP sunucusuna bağlanın

// 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; 

Oturumlar

Kimlik doğrulaması yapıldıktan sonra istemci bir AMQP oturumu açar. Oturum, istemci ile sunucu arasındaki iletişim için mantıksal bir bağlamdır. Oturumlar, ilgili mesajlaşma işlemlerini bir arada gruplamak için kullanılır. Yeni bir oturum oluşturmak için CreateSession metodunu kullanın; metot, oturum adını ayarlamaya veya boş bırakmaya olanak tanır, bu durumda bileşen otomatik olarak bir tane atar.

Oturum başarıyla oluşturulduysa, oturumun ayrıntılarıyla birlikte OnAMQPSessionOpen olayı tetiklenir. 

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

Bağlantılar

Bir oturum içinde istemci, sunucu tarafından sağlanan kuyruklar, konular veya diğer kaynaklar gibi belirli varlıklarla iletişim kurmak için bağlantılar oluşturur. Bağlantılar, mesaj göndermek ve almak için kullanılan çift yönlü iletişim kanallarıdır.

Bileşen, bir gönderen ve alıcı düğümü olarak çalışabilir. Her oturum için, MaxLinksPerSession özelliğinde belirlenen sınıra kadar herhangi bir sayıda bağlantı oluşturmaya olanak tanır. 

Gönderen Bağlantıları

Yeni bir gönderen bağlantısı oluşturmak için CreateSenderLink metodunu kullanın ve oturumun adını ve isteğe bağlı olarak gönderen bağlantısının adını geçirin. Bağlantı başarıyla oluşturulursa OnAMQPLinkOpen olayı tetiklenir.

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; 

Alıcı Bağlantıları

Yeni bir alıcı bağlantısı oluşturmak için CreateReceiverLink metodunu kullanın ve oturumun adını ve isteğe bağlı olarak alıcı bağlantısının adını geçirin. Bağlantı başarıyla oluşturulursa OnAMQPLinkOpen olayı tetiklenir. 

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; 

Mesaj Gönderme

Oturum kurulduktan ve bağlantılar oluşturulduktan sonra istemci, bir hedefe mesaj gönderme gibi mesaj işlemlerini gerçekleştirmeye başlayabilir. Bir gönderen bağlantısını kullanarak bir mesaj göndermek için SendMessage metodunu kullanın. 

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

Mesaj Okuma

Varsayılan olarak Alıcı Bağlantıları Otomatik modda oluşturulur; bu, her yeni mesaj geldiğinde istemciye teslim edileceği anlamına gelir.

Alıcı Bağlantıları manuel modda oluşturulduysa, yeni bir mesaj gelene kadar getirmek ve beklemek için Senkron Metot GetMessage'i kullanın.

Otomatik ve Manuel modda, her yeni mesaj geldiğinde OnAMQPMessage olayı tetiklenir. 

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

Belgeler

AMQP1 Delphi Client

Delphi / CBuilder AMQP 1.0.0 İstemcisi hakkında daha fazla bilgi edinin https://www.esegece.com/help/sgcWebSockets/#t=Components%2FProtocols%2FSubprotocols%2FAMQP1%2FProtocol_AMQP1.htm

Demoyu İndir

sgcWebSockets kütüphanesini kullanarak Windows için derlenmiş AMQP 1.0.0 İstemci Demosunu indirin.