2013-07-18 14 views
5

Essendo un po 'confusi su questi due termini, sto pensando a che cosa è lo scopo di avere un messaggio persistente ma una coda transitoria (non duratura)? Dopo tutto, se il broker si riavvia e le code non vengono ripristinate, i messaggi recuperati verranno sprecati.Concetti di persistenza e durata Confusione in AMQP

risposta

4

È possibile avere una coda duratura ma messaggi "mortali", quindi dopo il riavvio del broker è ancora possibile fare la coda ma sarà vuota e viceversa, ma se si è tristi, sì, si perderanno tutti i messaggi nella coda.

Nella combinazione che hai fornito l'opzione di persistenza dei messaggi è davvero inutile ma non causerà errori.

Ma se si esegue lo scambio di alternate exchange, si stanno pubblicando messaggi ed è durevole, dopo il riavvio, è possibile instradare i messaggi su di esso se non è stata dichiarata la coda transitoria.

Esempio:

Supponiamo di avere tale combinazione e le code correttamente legati, Q*1 ricevere messaggi M*1 e Q*2 - M*2.

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
[Qm1/transient][Qm2/transient] [Qax1/durable][Qax2/durable] 

Diamo pubblicare messaggi [Mt1/transient] e `[MD1/durevole], otterremo tale situazione:

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
[Qm1/transient][Qm2/transient] [Qax1/durable][Qax2/durable] 
[Mt1/transient] 
[Md1/durable] 

Dopo il riavvio avremo

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
           [Qax1/durable][Qax2/durable] 

Diamo pubblicare due messaggi ancora, [Mt1/transient] e `[Md1/durevole]:

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
           [Qax1/durable][Qax2/durable] 
           [Mt1/transient] 
           [Md1/durable] 

Quindi, riavviare mediatore di nuovo:

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
           [Qax1/durable][Qax2/durable] 
           [Md1/durable] 
+0

Così, quando nel nel vizio scenario versa abbiamo code "mortali" e messaggi permanenti, dopo il riavvio ci ritroveremo senza code, ma i messaggi che sono stati assegnati in precedenza al più code esistenti, vuol dire che abbiamo messaggi penzolanti? – ahj

+0

I messaggi andranno persi. Ho aggiornato la mia risposta con l'esempio, spero, sarà di aiuto. – pinepain

+0

@pinepain: definire "i messaggi andranno persi." Significa che i messaggi sono stati cancellati dal disco o che sono ancora sul disco ma sono rimasti orfani perché RabbitMQ non sa più dove si trovano? – Ellesedil