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
- Mesaj odaklı iletişim: AMQP 1.0.0, mesaj kavramı etrafında merkezlenir. Mesajlar veri, talimat veya komut taşıyabilir ve iletişimin temel birimleridir.
- Mesaj Broker'ları: Protokol, broker'lı bir mesajlaşma modeliyle çalışır. Sunucular veya aracı varlıklar olabilen broker'lar, üreticiler ve tüketiciler arasındaki mesajların yönlendirilmesini ve teslimini yönetir.
- Kuyruklar ve Exchange'ler: Kuyruklar, mesajların geçici olarak depolandığı broker içindeki depolama varlıklarıdır. Exchange'ler, mesaj içeriği veya yönlendirme anahtarları gibi ölçütlere göre mesajların üreticilerden kuyruklara yönlendirilmesi için kuralları tanımlar.
- Adresler ve Bağlantılar: Adresler, mesajlaşma altyapısı içindeki mesaj hedeflerini tanımlar. Bağlantılar, belirli bir adresle ilişkili bir gönderen (üretici) ile bir alıcı (tüketici) arasındaki iletişim kanallarıdır.
- Oturumlar ve Bağlantılar: Oturumlar, tek bir bağlantı içinde birden fazla mesaj akışına olanak tanıyan, iletişim için mantıksal bir kanalı temsil eder. Bağlantılar, istemci uygulamaları ile mesaj broker'ı arasındaki genel iletişim bağlantısını yönetir.
- Güvenlik: AMQP 1.0.0, istemciler ve broker'lar arasında güvenli iletişimi sağlamak için kimlik doğrulama ve yetkilendirme dahil çeşitli güvenlik mekanizmalarını destekler.
- Taşımadan Bağımsız: Protokol, taşımadan bağımsız olacak şekilde tasarlanmıştır, yani TCP, TLS veya WebSockets gibi farklı ağ taşımaları üzerinde çalışabilir ve dağıtımda esneklik sağlar.
- Akış Kontrolü: AMQP 1.0.0, tüketicilerin gelen mesajları belirli bir hızda işleme yeteneklerini belirtmelerine olanak tanıyan akış kontrolü mekanizmaları içerir. Bu, tüketicilerin çok sayıda mesajla aşırı yüklenmesini önlemeye yardımcı olur.
- Hata İşleme: Protokol, mesajların onaylanması ve reddedilmesi dahil olmak üzere hataları işleme mekanizmalarını belirleyerek mesaj tesliminde sağlamlık ve güvenilirlik sağlar.
- SASL Kimlik Doğrulaması: Simple Authentication and Security Layer (SASL), istemciler ile broker'lar arasındaki bağlantıları doğrulamak ve güvence altına almak için kullanılır.
Yapılandırma
AMQP 1.0.0 istemcisi, bağlantıyı yapılandırabileceğiniz AMQPOptions özelliğine sahiptir.
- ChannelMax: channel-max değeri, bağlantıda kullanılabilecek en yüksek kanal numarasıdır. Bu
değer artı bir, bağlantıda aynı anda etkin olabilecek maksimum oturum sayısıdır - ContainerId: (isteğe bağlı) kaynak kapsayıcısının adıdır, sunucudaki bağlantıyı benzersiz olarak tanımlar.
- CreditSize: credit akışının varsayılan boyutu.
- IdleTimeout: Zaman aşımı, bir eşik değeri aşıldıktan sonra hiçbir çerçeve
alınmadığında yerel bir eş tarafından tetiklenir. Boşta zaman aşımı milisaniye cinsinden ölçülür ve
son çerçevenin alındığı andan itibaren başlar. - MaxFrameSize: kabul edilen maksimum çerçeve boyutu.
- MaxLinksPerSession: oturum başına maksimum bağlantı sayısı.
- WindowSize: varsayılan pencere boyutu.
AMQP Kimlik Doğrulaması, Authentication özelliğinde yapılandırılmalıdır.
- AuthType: kimlik doğrulama türü
- amqp1authNone: yapılandırılmadı.
- amqp1authSASLAnonymous: anonim kimlik doğrulama
- amqp1authSASLPlain: kullanıcı/parola kimlik doğrulaması. Bu kimlik doğrulama türü, aşağıdaki özelliklerin doldurulmasını gerektirir:
- Username
- Password
- amqp1authSASLExternal: harici kimlik doğrulama
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.htmDemoyu İndir
sgcWebSockets kütüphanesini kullanarak Windows için derlenmiş AMQP 1.0.0 İstemci Demosunu indirin.
