AMQP Exchange'leri ve Kuyrukları (1 / 3)

· Bileşenler

sgcWebSockets 2022.1'den itibaren AMQP 0.9.1 protokolü desteklenmektedir. Advanced Message Queuing Protocol (AMQP), mesaj odaklı ara katman yazılımı için açık standart bir uygulama katmanı protokolüdür. AMQP'nin tanımlayıcı özellikleri mesaj odaklılık, kuyruğa alma, yönlendirme (noktadan noktaya ve yayınla-abone ol dahil), güvenilirlik ve güvenliktir.

AMQP, çok çeşitli mesajlaşma uygulamalarını ve iletişim kalıplarını verimli bir şekilde desteklemek için tasarlanmış ikili bir uygulama katmanı protokolüdür. En fazla bir kez (her mesajın bir kez veya hiç teslim edilmediği), en az bir kez (her mesajın kesinlikle teslim edileceği, ancak bunu birden çok kez yapabileceği) ve tam olarak bir kez (mesajın her zaman kesinlikle ulaşacağı ve bunu yalnızca bir kez yapacağı) gibi mesaj teslim garantileriyle akış kontrollü, mesaj odaklı iletişim ve SASL ve/veya TLS temelli kimlik doğrulama ve/veya şifreleme sağlar. Transmission Control Protocol (TCP) gibi temel bir güvenilir taşıma katmanı protokolü varsayar.

Kanallar 

AMQP, çok kanallı bir protokoldür. Kanallar, ağır bir TCP/IP bağlantısını birkaç hafif bağlantıya çoğullamanın bir yolunu sağlar. Bağlantı noktası kullanımı öngörülebilir olduğundan bu, protokolü daha "güvenlik duvarı dostu" hale getirir. Ayrıca trafik şekillendirme ve diğer ağ QoS özelliklerinin kolayca kullanılabileceği anlamına gelir.

Her kanal kendi iş parçacığında çalışır, bu nedenle her yeni mesaj alındığında önce istemci kanalı tanımlar ve mesajı, iş parçacığı kanalı tarafından işlenen bir kuyruğa alır.

Kanal yaşam döngüsü şudur:

1. İstemci yeni bir kanal açar (Open).

2. Sunucu yeni kanalın hazır olduğunu onaylar (Open-Ok).

3. İstemci ve sunucu kanalı istenildiği gibi kullanır.

4. Bir eş (istemci veya sunucu) kanalı kapatır (Close).

5. Diğer eş kanal kapatmayı el sıkışarak onaylar (Close-Ok).


Yeni bir kanal oluşturmak için OpenChannel metodunu çağırmanız ve kanal adını bağımsız değişken olarak geçirmeniz yeterlidir. OnAMQPChannelOpen olayı, kanalın açıldığına dair sunucu tarafından gönderilen bir onay olarak tetiklenir.

AMQP.OpenChannel('channel_name');
procedure OnAMQPChannelOpen(Sender: TObject; const aChannel: string);
begin
  DoLog('#AMQP_channel_open: ' + aChannel);
end; 

Exchange'ler 

Exchange sınıfı, bir uygulamanın sunucudaki exchange'leri yönetmesini sağlar. Bu sınıf, uygulamanın (bir yapılandırma arayüzüne güvenmek yerine) kendi bağlantısını betiklemesine olanak tanır. Not: Çoğu uygulama bu düzeyde karmaşıklığa ihtiyaç duymaz ve eski ara katman yazılımının bu semantiği destekleyebilmesi olası değildir.

Exchange yaşam döngüsü şudur:

1. İstemci, sunucudan exchange'in var olduğundan emin olmasını ister (Declare). İstemci bunu "exchange yoksa oluştur" veya "yoksa beni uyar ama oluşturma" şeklinde belirleyebilir.

2. İstemci exchange'e mesaj yayınlar.

3. İstemci exchange'i silmeyi seçebilir (Delete).

DeclareExchange metodu yeni bir exchange oluşturur veya bir Exchange'in zaten var olduğunu doğrular. Metot aşağıdaki bağımsız değişkenlere sahiptir:


Yeni bir Exchange Bildirmek için DeclareExchange metodunu çağırmanız ve kanal adını, exchange adını ve exchange türünü bağımsız değişken olarak geçirmeniz yeterlidir. OnAMQPExchangeDeclare olayı, exchange'in bildirildiğine dair sunucu tarafından gönderilen bir onay olarak tetiklenir.

AMQP.DeclareExchange('channel_name', 'exchange_name', 'direct');
procedure OnAMQPExchangeDeclare(Sender: TObject; const aChannel, aExchange: string);
begin
  DoLog('#AMQP_exchange_declare: [' + aChannel + '] ' + aExchange);
end; 

Kuyruklar 

Queue sınıfı, bir uygulamanın sunucudaki mesaj kuyruklarını yönetmesini sağlar. Bu, mesaj tüketen neredeyse tüm uygulamalarda, en azından beklenen bir mesaj kuyruğunun gerçekten mevcut olduğunu doğrulamak için temel bir adımdır.

Kalıcı bir mesaj kuyruğunun yaşam döngüsü oldukça basittir:

1. İstemci mesaj kuyruğunun var olduğunu öne sürer (Declare, "passive" bağımsız değişkeniyle).

2. Sunucu mesaj kuyruğunun var olduğunu onaylar (Declare-Ok).

3. İstemci mesaj kuyruğundan mesajları okur.

Geçici bir mesaj kuyruğunun yaşam döngüsü daha ilginçtir:

1. İstemci mesaj kuyruğunu oluşturur (Declare, genellikle mesaj kuyruğu adı olmadan, böylece sunucu bir ad atar). Sunucu onaylar (Declare-Ok).

2. İstemci mesaj kuyruğunda bir tüketici başlatır. Bir tüketicinin kesin işlevselliği Basic sınıfı tarafından tanımlanır.

3. İstemci, açıkça veya kanalı ve/veya bağlantıyı kapatarak tüketiciyi iptal eder.

4. Son tüketici mesaj kuyruğundan kaybolduğunda ve nazik bir zaman aşımından sonra sunucu mesaj kuyruğunu siler.

AMQP, konu abonelikleri için teslim mekanizmasını mesaj kuyrukları olarak uygular. Bu, bir aboneliğin iş birliği yapan bir abone havuzu arasında yük dengelenebileceği ilginç yapıları mümkün kılar

uygulamalar.

Bir aboneliğin yaşam döngüsü ekstra bir bağlama aşaması içerir:

1. İstemci mesaj kuyruğunu oluşturur (Declare) ve sunucu onaylar (Declare-Ok).

2. İstemci mesaj kuyruğunu bir konu exchange'ine bağlar (Bind) ve sunucu onaylar (Bind-Ok).

3. İstemci mesaj kuyruğunu önceki örneklerdeki gibi kullanır.

DeclareQueue metodu yeni bir kuyruk oluşturur veya bir Kuyruğun zaten var olduğunu doğrular. Metot aşağıdaki bağımsız değişkenlere sahiptir:


Yeni bir Kuyruk Bildirmek için DeclareQueue metodunu çağırmanız ve kanal adını ve kuyruk adını bağımsız değişken olarak geçirmeniz yeterlidir. OnAMQPQueueDeclare olayı, exchange'in bildirildiğine dair sunucu tarafından gönderilen bir onay olarak tetiklenir.

AMQP.DeclareQueue('channel_name', 'queue_name');
procedure OnAMQPQueueDeclare(Sender: TObject; const aChannel, aQueue: string; aMessageCount, aConsumerCount: Integer);
begin
  DoLog('#AMQP_queue_declare: [' + aChannel + '] ' + aQueue);
end;