Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 44647|Risposta: 8

[WinForm] Persistenza dei messaggi della coda rabbitMQ [con codice sorgente]

[Copiato link]
Pubblicato su 09/04/2018 10:23:21 | | | |
Di default, i messaggi della coda rabbitMQ non vengono persistiti sul disco rigido, il che significa che una volta riavviato il servizio rabbitMQ, i messaggi andranno persi.

Persistenza delle code

Ad esempio, viene identificata la persistenza della codadurableis è impostato su true, il che significa che è una coda persistente, poi, dopo il riavvio del servizio, esisterà anch'esso, perché il servizio memorizzerà la coda persistente sul disco rigido e, quando il servizio viene riavviato, ristabilirà ciò che era precedentemente la coda persistente. La coda può essere mantenuta, ma se i messaggi all'interno siano persistenti dipende dalle impostazioni di persistenza del messaggio. In altre parole, se non viene inviato alcun messaggio in coda prima del riavvio, se il messaggio originale esiste ancora in coda dopo il riavvio dipende dalle impostazioni del messaggio avvenute al momento dell'invio.
Se vuoi mantenere i messaggi persistenti dopo un riavvio, devi impostare l'identità che indica che il messaggio è stato mantenuto.

Imposta la persistenza della coda:




Il quarto parametro del metodo, autoDelete, viene solitamente inserito falso. La documentazione descrive questo parametro se vero, il che significa che se la coda non viene più utilizzata (non abbonata), il server la cancellerà. Durante i miei test, finché tutti i destinatari della coda di cambio connessione sono disconnessi, la coda viene cancellata, anche se ci sono ancora messaggi non elaborati. Anche i riavvii di RabbitMQ li rimuovono. Se viene inserito falso, il servizio non eliminerà la coda e i messaggi presenti in coda esisteranno se tutti i client collegati ad essa vengono disconnessi. Il mittente può anche inserire messaggi nella coda di modifica quando non c'è connessione client, e quando il client si attiva, riceverà questi messaggi. Tuttavia, se il servizio RabbitMQ viene riavviato, la coda sparisce e i messaggi in esso scompariranno naturalmente.

Il terzo parametro è esclusivo, e la documentazione afferma che, se vero, la connessione della coda viene interrotta e la coda viene eliminata, inclusi i messaggi all'interno.

Il secondo parametro, durabile, è descritto nella documentazione come affermando che, se vero, rappresenta una coda persistente, che esisterà anche dopo il riavvio del servizio. Poiché il servizio memorizzerà la coda persistente sul disco rigido e, quando il servizio viene riavviato, riaffermerà questa coda. Ovviamente, deve essere così quando sia autoDelete che esclusivo sono false. La coda può essere mantenuta, ma se i messaggi all'interno siano persistenti dipende dalle impostazioni di persistenza del messaggio. In altre parole, se ci sono ancora messaggi inviati in coda prima del riavvio, se il messaggio originale esiste ancora in coda dopo il riavvio dipende dalle impostazioni del mittente per il messaggio al momento dell'invio.


Dopo aver modificato il codice, proviamo a eseguirlo, e l'errore sarà il seguente:

Eccezione non gestita: RabbitMQ.Client.Exceptions.OperationInterruptedException: L'operazione AMQP è stata interrotta: AMQP close-reason, avviata da Peer, code=406, text="PRECONDITION_FAILED - arg inequivalente 'durable' per la coda 'hello' in vhost 'myserver': received 'true' ma corrente è 'false'", classId=50, methodId=10, cause=



Perché abbiamo definito una coda non persistente chiamata hello. RabbitMQ non consente di ridefinire code esistenti con impostazioni di parametri diverse.

Ci sono due soluzioni:

1: Ridichiarare una coda con un nome diverso, come my_queue
2: Elimina la coda "hello" definita con l'indirizzo di http://localhost:15672 e accedi con il nome utente e la password. La password predefinita e il nome utente di RabbitMQ sono ospiti. Clicca sulla colonna "coda" per vedere la lista delle code, clicca sulla coda "ciao" per espandere i dettagli della coda. Porta la pagina alla fine, c'è un elemento "Elimina", clicca sopra, clicca sul pulsante "Elimina coda" e puoi eliminare la coda. Poi, quando il codice viene eseguito, viene creata una coda hello che supporta la persistenza.



Persistenza dei messaggi

Se vuoi mantenere il messaggio persistente dopo un riavvio, devi impostare il messaggio per essere persistente. L'impostazione è quando il mittente lo invia, che è relativamente semplice, e il codice è il seguente:


DeliveryMode di default è 1, non persistente, e impostando 2 il messaggio è persistente

Dopo aver modificato il codice, cerchiamo di aprire solo il programma produttore per inviare messaggi, poi riavviiamo il servizio rabbitMQ, riapriamo il consumer e scopriamo che il messaggio non è andato perso.

(Fine)

Allegato è il codice sorgente C#:

Turisti, se volete vedere il contenuto nascosto di questo post, vi pregoRisposta





Precedente:Messaggio eccezione: "StrongTypingException: IsPrima...
Prossimo:Introduzione ai delegati C# (delegato, Azione, Func, predicato)
Pubblicato su 09/04/2018 13:17:51 |
Impara a imparare
Pubblicato su 25/06/2019 23:22:47 |
Impara a imparare
Pubblicato su 29/06/2019 09:36:23 |
Perché non ho visto la demo? Devo rispondere per vederla
Pubblicato su 09/07/2019 17:34:42 |
Voglio codice sorgente in C#
Pubblicato su 24/07/2019 14:21:51 |
Va bene, è esattamente quello di cui ho bisogno
Pubblicato su 11/04/2020 14:34:54 |
Imparalo
Pubblicato su 01/01/2022 14:45:24 |
1111111111111111
 Padrone di casa| Pubblicato su 03/05/2023 22:12:22 |
Parametri della coda di RabbitMQ e i loro significati


/**
* Costruire una nuova coda, assegnare un nome, un flag di durabilità e un flag di cancellazione automatica, e argomentazioni.
* @param il nome della coda - non deve essere nullo; imposta su "" per far generare il nome dal broker.
* @param vero resistente se dichiariamo una coda duratura (la coda sopravviverà a un riavvio del server)
* @param vero esclusivo se stiamo dichiarando una coda esclusiva (la coda sarà usata solo dai dichiaranti
* connessione)
* @param autoDelete vero se il server deve eliminare la coda quando non è più in uso
* @param argomenti gli argomenti usati per dichiarare la coda
*/
public Queue(Nome stringa, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> argomentazioni) {
   Assert.notNull(nome, "'nome' non può essere nullo");
   this.name = nome;
   this.actualName = StringUtils.hasText(name) ? Nome
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = duraturo;
   this.exclusive = esclusivo;
   this.autoDelete = autoDelete;
   this.arguments = arguments != null ? argomentazioni: nuovo HashMap<>();
}

Introduzione dei parametri:
1. nome: il nome della fila;
2. actualName: Il vero nome della coda, il parametro name viene usato di default, se il nome è vuoto, viene generato secondo le regole;
3. durevole: se è persistente;
4. Esclusivo: se è esclusivo o esclusivo;
5. autoDelete: se eliminare automaticamente;
6. Argomenti: Altri parametri di attributo della coda hanno le seguenti opzioni, vedi Argomenti nella Figura 2:
(1) x-message-ttl: il tempo di scadenza del messaggio, in millisecondi;
(2) x-scadenza: tempo di scadenza della coda, quanto tempo la coda verrà eliminata se non viene accessibile, unità: millisecondi;
(3) x-max-length: la lunghezza massima della coda, se supera il valore massimo, il messaggio verrà cancellato dall'intestazione della coda;
(4) byte-max-length: il contenuto del messaggio della coda occupa lo spazio massimo, limitato dalla dimensione della memoria, e se supera questa soglia, il messaggio verrà cancellato dall'intestazione della coda;
(5) x-overflow: Imposta il comportamento di overflow della coda. Questo determina cosa succede al messaggio quando si raggiunge la lunghezza massima della coda. I valori validi sono drop-head, reject-publish o reject-publish-dlx. I tipi di code Quorum supportano solo il drop-head;
(6) scambio di lettere morte x: il nome dello scambio lettere morte e i messaggi scaduti o cancellati (a causa della lunga lunghezza della coda o dello spazio superiore alla soglia) possono essere specificati per essere inviati allo scambio;
(7) chiave di instradamento con lettere morte x: La chiave di instradamento del messaggio con lettere morte, che sarà usata quando il messaggio viene inviato allo scambiatore di lettere morte, se non impostata, verrà utilizzata la chiave di instradamento originale del messaggio
(8) x-singolo-consumatore attivo: indica se la coda è un singolo consumatore attivo, se è vero, solo un consumatore nel gruppo di consumatori registrati consuma messaggi, gli altri vengono ignorati, e falso quando il messaggio viene distribuito a tutti i consumatori in un ciclo (predefinito falso)
(9) x-max-priority: il numero massimo di priorità da supportare dalla coda; Se non impostato, la coda non supporterà la priorità dei messaggi;
(10) modalità x-queue (modalità pigra): Imposta la coda in modalità ritardo, tieni quanti più messaggi possibile sul disco per ridurre l'uso di RAM; Se non impostato, la coda manterrà una cache di memoria per consegnare i messaggi il più rapidamente possibile;
(11) x-queue-master-locator: Imposta le informazioni del nodo master della coda specchio in modalità cluster.


Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com