2010-02-26 3 views
34

나는이 옵션을 사용할 수 있습니다 이해 :AMQP의 "배달 모드"란 무엇입니까?

  • "비 영구적"
  • "영구"

그러나이 실제로 무엇을 의미 하는가?

"non-persistent": AMQP fabric은 소비자가 없으면 메시지 배달을 시도하고 메시지는 삭제됩니까?

"Persistent": AMQP는 소비자가 승인 할 때까지 메시지를 다시 시도합니다.

답변

26

@jldupont - @nos가 말한 것. '영구적'으로 표시된 메시지는 '내구성있는'대기열로 전달되어 디스크에 기록됩니다. 내구성 큐는 충돌이 발생하기 전에 복구되고, 충돌 이전에 저장된 모든 지속 메시지가 복구됩니다. 이에 대한 자세한 내용은 메일 링리스트를 요청하거나 rabbitmq 웹 사이트의 다양한 배경 정보를 살펴 보는 것이 좋습니다. 궁금한 점이 있으시면 으로 연락하십시오. 메시지 브로커가 다시 시작된 후에 디스크에 저장되는 경우

건배 AMQP에

렉시

+0

감사합니다. Alexis !! – jldupont

+0

왜 Exchange 내구성을 선언 할 수 있는지 이해할 수 없습니다. 그리고 다른면에서 당신은 "할 수있다"!? 해당 Exchange에 "대응"할 수없는 큐를 선언 할 수 있습니까? 또는 예를 들어 Exchange NONDURABLE을 선언하지만 내구성이 강한 대기열을 선언하면 충돌이 발생할 수 있습니다. 비 지속 교환기에서 내구성 큐를 복구 할 수 있습니까? @alexis – Detached

+2

"durability"는 Exchange 또는 Queue가 서버를 다시 시작할 때까지 유지된다는 것을 의미합니다. 이는 내구성 큐에 저장된 메시지가 남아 있다는 것을 의미하지는 않습니다. 메시지 수준 속성'.deliveryMode = 2'도 필요합니다. . (방금이 경우를 테스트했습니다) – Myobis

12

delivery_mode 판단한다. 당신은 지속적으로 메시지를 표시 할 수 있습니다 - delivery_mode property = 2 최저치를함으로써 당신은 PHP (PECL AMQP 확장)에 예를 들어 메시지 를 게시 할 때 :

또한 (또는 브로커 정지 후 삭제됩니다 대기열로 내구성 선언해야
$exchange->publish($text, $routingKey, null, array('delivery_mode' => 2)); 

)

$queue->setFlags(AMQP_DURABLE);