2016-07-18 196 views
7

Voglio sapere in che modo RabbitMQ memorizza i messaggi fisicamente nella sua RAM e Disco?In che modo RabbitMQ archivia effettivamente il messaggio fisicamente?

So che RabbitMQ tenta di mantenere i messaggi in memoria (ma non so come i messaggi vengono inseriti nella Ram). Ma i messaggi possono essere riversati nel disco quando i messaggi sono in modalità persistente o quando il broker ha la pressione della memoria. (Ma non so come i messaggi siano archiviati nel disco.)

Mi piacerebbe conoscere gli interni di questi. Sfortunatamente, la documentazione ufficiale nella sua homepage non espone i dettagli interni.

Quale documento devo leggere per questo?

risposta

6

RabbitMQ usues un DB personalizzato per memorizzare i messaggi, il db è di solito si trova qui:

/var/lib/rabbitmq/mnesia/[email protected]/queues 

Partendo dalla versione 3.5.5 RabbitMQ ha introdotto il nuovo New Credit flusso https://www.rabbitmq.com/blog/2015/10/06/new-credit-flow-settings-on-rabbitmq-3-5-5/

Diamo un'occhiata a come le code di RabbitMQ memorizzano i messaggi. Quando un messaggio entra nella coda, la coda deve determinare se il messaggio deve essere persistente o meno. Se il messaggio deve essere persistente, allora RabbitMQ lo farà subito [3]. Ora anche se un messaggio è stato persistuto su disco, questo non significa che il messaggio è stato rimosso dalla RAM, poiché RabbitMQ mantiene una cache di messaggi nella RAM per l'accesso rapido quando recapita messaggi ai consumatori. Ogni volta che stiamo parlando di messaggi di paging su disco, stiamo parlando di ciò che RabbitMQ fa quando è deve inviare messaggi da questa cache al file system.

Questo post blog è abbastanza dettagliato.

Suggerisco anche di leggere su pigri coda: https://www.rabbitmq.com/lazy-queues.html e https://www.rabbitmq.com/blog/2015/12/28/whats-new-in-rabbitmq-3-6-0/

pigri code Questo nuovo tipo di code di lavoro con l'invio di ogni messaggio che viene consegnato a loro direttamente al file system, e solo caricando i messaggi nella RAM quando i consumatori arrivano alle code. Per ottimizzare il disco, i messaggi vengono caricati in lotti.

+0

Vedere le posizioni dei file effettivi qui: https://www.rabbitmq.com/relocate.html – Andy

+0

e sarebbe invece possibile utilizzare MSMQ invece per mantenere i messaggi? – Marco

+0

@Marco intendi "Accodamento messaggi Microsoft"? In generale (al momento) RabbitMQ non supporta database esterni per archiviare i messaggi – Gabriele