AMQP Receive Messages (3 / 3)

· Bileşenler

AMQP, mesajları 2 modda almaya olanak tanır:

Consume 

Tüketiciler kuyruklardan tüketir. Mesajları tüketmek için bir kuyruğun olması gerekir. Yeni bir tüketici eklendiğinde, kuyrukta zaten hazır mesajlar olduğu varsayıldığında teslimatlar hemen başlar.

Hedef kuyruk, tüketici kaydı sırasında boş olabilir. Bu durumda ilk teslimatlar, yeni mesajlar kuyruğa alındığında gerçekleşir.

Mesajları tüketmek asenkron bir görevdir; bu, tüketici kuyruğuna her yeni mesaj teslim edilebildiğinde sunucu tarafından otomatik olarak istemciye gönderildiği anlamına gelir. Mesajı Senkron Alma için alternatif bir metot okuyabilirsiniz.

Consume metodu kuyrukta yeni bir tüketici oluşturur ve her yeni mesaj olduğunda bu otomatik olarak tüketici istemcisine teslim edilir.

Metot aşağıdaki bağımsız değişkenlere sahiptir:


Mesajlar OnAMQPBasigGetOk olayında teslim edilir.

AMQP.Consume('channel_name', 'exchange_name', 'consumer_tag');
procedure OnAMQPBasicGetOk(Sender: TObject; const aChannel: string; const aGetOk: TsgcAMQPFramePayload_Method_BasicGetOk; const aContent: TsgcAMQPMessageContent);
begin
  DoLog('#AMQP_basic_GetOk: ' + aChannel + ' ' + IntToStr(aGetOk.MessageCount) + ' ' + aContent.Body.AsString);
end; 

Mesaj Alma 

Mesaj almak Senkron bir görevdir; bu, kuyrukta mesaj olup olmadığını sunucuya soranın istemci olduğu anlamına gelir. Mesajı Asenkron Alma için alternatif bir metot okuyabilirsiniz.

GetMessage metodu, AMQP sunucusuna bir kuyrukta mesaj olup olmadığını soran bir istek gönderir. Mesaj varsa bunlar OnAMQPBasicGetOk olayında gönderilir ve kuyruk boşsa OnAMQPBasicGetEmpty olayı çağrılır.

Metot aşağıdaki bağımsız değişkenlere sahiptir:

AMQP.GetMessage('channel_name', 'exchange_name');
procedure OnAMQPBasicGetOk(Sender: TObject; const aChannel: string; const aGetOk: TsgcAMQPFramePayload_Method_BasicGetOk; const aContent: TsgcAMQPMessageContent);
begin
  DoLog('#AMQP_basic_GetOk: ' + aChannel + ' ' + IntToStr(aGetOk.MessageCount) + ' ' + aContent.Body.AsString);
end;
procedure OnAMQPBasicGetEmpty(Sender: TObject; const aChannel: string);
begin
  DoLog('#AMQP_basic_GetEmpty: ' + aChannel);
end;