AMQP 메시지 수신 (3 / 3)

· 컴포넌트

AMQP는 메시지를 2가지 모드로 수신할 수 있게 해줘요.

Consume 

컨슈머는 큐에서 메시지를 소비해요. 메시지를 소비하려면 큐가 있어야 해요. 새 컨슈머가 추가될 때 큐에 이미 메시지가 준비되어 있다고 가정하면 전달이 즉시 시작돼요.

컨슈머 등록 시점에 대상 큐가 비어 있을 수도 있어요. 그 경우 새 메시지가 큐에 들어올 때 첫 전달이 시작돼요.

메시지를 소비하는 것은 비동기 작업이에요. 즉, 새 메시지가 컨슈머 큐로 전달될 수 있을 때마다 서버가 자동으로 클라이언트로 푸시해요. 메시지 동기 수신이라는 대체 방법도 있어요.

Consume 메서드는 큐에 새 컨슈머를 만들고, 새 메시지가 있을 때마다 자동으로 컨슈머 클라이언트에 전달돼요.

메서드는 다음 인자를 가져요.


메시지는 OnAMQPBasigGetOk 이벤트로 전달돼요.

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; 

메시지 가져오기 

메시지 가져오기는 동기 작업으로, 클라이언트가 서버에 큐에 메시지가 있는지 묻는 방식이에요. 메시지 비동기 수신이라는 대체 방법도 있어요.

GetMessage 메서드는 AMQP 서버에 큐에 사용 가능한 메시지가 있는지 묻는 요청을 보내요. 메시지가 있으면 OnAMQPBasicGetOk 이벤트로 디스패치되고, 큐가 비어 있으면 OnAMQPBasicGetEmpty 이벤트가 호출돼요.

메서드는 다음 인자를 가져요.

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;