Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 44647|Répondre: 8

[WinForm] Persistance des messages de file d’attente rabbitMQ [avec code source]

[Copié le lien]
Publié sur 09/04/2018 10:23:21 | | | |
Par défaut, les messages de file rabbitMQ ne sont pas persistés sur le disque dur, ce qui signifie qu’une fois le service rabbitMQ redémarré, les messages seront perdus.

Persistance des files d’attente

Par exemple, la persistance de la file d’attente est identifiéedurableis est réglé sur true, ce qui signifie qu’il s’agit d’une file d’attente persistante, puis après le redémarrage du service, il existera aussi, car le service stockera la file d’attente persistante sur le disque dur, et lorsque le service sera redémarré, il rétablira ce qui était auparavant en file d’attente. La file peut être perpétuée, mais la persistance des messages à l’intérieur dépend des paramètres de persistance du message. En d’autres termes, s’aucun message n’est envoyé dans la file avant le redémarrage, la présence du message original dans la file après le redémarrage dépend des paramètres du message qui ont été effectués lors de l’envoi.
Si vous souhaitez garder les messages persistants après un redémarrage, vous devez définir l’identité que le message est persisté.

Configurez la persistance de la file d’attente :




Le quatrième paramètre de la méthode, autoDelete, est généralement saisi fau. La documentation décrit ce paramètre s’il est vrai, ce qui signifie que si la file d’attente n’est plus utilisée (non abonnée), le serveur le supprimera. Lors de mes tests, tant que tous les destinataires de la file de changement de connexion sont déconnectés, la file est supprimée, même s’il reste des messages non traités. Les redémarrages de RabbitMQ les suppriment aussi. Si un faux est saisi, le service ne supprimera pas la file d’attente et les messages dans la file existeront si tous les clients connectés y sont déconnectés. L’expéditeur peut aussi envoyer des messages dans la file de changement lorsqu’il n’y a pas de connexion client, et lorsque le client apparaît, il recevra ces messages. Cependant, si le service RabbitMQ est redémarré, la file disparaîtra et les messages qu’elle contient disparaîtront naturellement.

Le troisième paramètre est exclusif, et la documentation indique que si c’est vrai, alors la connexion de la file est rompue, puis la file est supprimée, y compris les messages à l’intérieur.

Le second paramètre, durable, est décrit dans la documentation comme indiquant que s’il est vrai, il représente une file d’attente persistante, qui existera également après le redémarrage du service. Parce que le service stockera la file d’attente persistante sur le disque dur, et lorsque le service sera redémarré, il réaffirmera cette file. Bien sûr, cela doit être le cas lorsque l’autoSuppression et l’exclusivité sont tous deux faux. La file peut être perpétuée, mais la persistance des messages à l’intérieur dépend des paramètres de persistance du message. En d’autres termes, s’il reste encore des messages envoyés dans la file avant le redémarrage, la présence du message original dans la file après le redémarrage dépend des paramètres de l’expéditeur pour le message lors de l’envoi.


Après avoir modifié le code, nous essayons de l’exécuter, et l’erreur sera la suivante :

Exception non traitée : RabbitMQ.Client.Exceptions.OperationInterruptedException : L’opération AMQP a été interrompue : AMQP close-reason, initiée par Peer, code=406, text="PRECONDITION_FAILED - arg inéquivalent 'durable' pour la file d’attente 'hello' dans vhost 'myserver' : received 'true' but current is 'false'", classId=50, methodId=10, cause=



Parce que nous avons défini une file d’attente non persistée appelée hello. RabbitMQ n’autorise pas la redéfinition des files d’attente existantes avec des paramètres différents.

Il existe deux solutions :

1 : Redéclarer une file d’attente sous un nom différent, comme my_queue
2 : Supprimez la file « hello » définie avec l’adresse de http://localhost:15672 et connectez-vous avec le nom d’utilisateur et le mot de passe. Le mot de passe par défaut et le nom d’utilisateur de RabbitMQ sont invités. Cliquez sur la colonne « file d’attente » pour voir la liste des files d’attente, cliquez sur la file « bonjour » pour développer les détails de la file. Faites glisser la page à la fin, il y a un élément « Supprimer », cliquez dessus, cliquez sur le bouton « Supprimer la file », et vous pouvez supprimer la file d’attente. Ensuite, lorsque le code est exécuté, une file hello est créée pour supporter la persistance.



Persistance des messages

Si vous souhaitez garder le message persistant après un redémarrage, vous devez configurer le message pour qu’il persiste. Le réglage est lorsque l’expéditeur l’envoie, ce qui est relativement simple, et le code est le suivant :


Le mode Livraison est par défaut à 1, non persistant, et le réglage à 2 signifie que le message est persistant

Après avoir modifié le code, nous essayons de n’ouvrir que le programme producteur pour envoyer des messages, puis de redémarrer le service rabbitMQ, de rouvrir le consommateur, et de constater que le message n’est pas perdu.

(Fin)

En pièce jointe est le code source C# :

Touristes, si vous voulez voir le contenu caché de ce post, s’il vous plaîtRépondre





Précédent:Message d’exception : « StrongTypingException : IsPrima...
Prochain:Introduction aux délégués C# (délégué, action, func, prédicat)
Publié sur 09/04/2018 13:17:51 |
Apprendre à apprendre
Publié sur 25/06/2019 23:22:47 |
Apprendre à apprendre
Publié sur 29/06/2019 09:36:23 |
Pourquoi n’ai-je pas vu la démo, je dois répondre pour la voir
Publié sur 09/07/2019 17:34:42 |
Je veux du code source C#
Publié sur 24/07/2019 14:21:51 |
C’est bien, c’est exactement ce dont j’ai besoin
Publié sur 11/04/2020 14:34:54 |
Apprends-le
Publié sur 01/01/2022 14:45:24 |
1111111111111111
 Propriétaire| Publié sur 03/05/2023 22:12:22 |
Paramètres de la file d’attente de RabbitMQ et leurs significations


/**
* Construire une nouvelle file d’attente, donner un nom, un drapeau de durabilité, un drapeau de suppression automatique et des arguments.
* @param nommer le nom de la file - ne doit pas être nul ; Réglez sur « » pour que le courtier génère le nom.
* @param durable vrai si nous déclarons une file d’attente durable (la file survivra à un redémarrage du serveur)
* @param vrai exclusif si nous déclarons une file d’attente exclusive (la file ne sera utilisée que par les déclarants
* connexion)
* @param suppression automatique vraie si le serveur doit supprimer la file d’attente lorsqu’elle n’est plus utilisée
* @param arguments les arguments utilisés pour déclarer la file d’attente
*/
public Queue(Nom de chaîne, booléen durable, booléen exclusif, boolean autoDelete, Map<String, Object> arguments) {
   Assert.notNull(nom, « 'nom' ne peut pas être nul ») ;
   this.name = nom ;
   this.actualName = StringUtils.hasText(name) ? Nom
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + « _awaiting_declaration ») ;
   this.durable = durable ;
   this.exclusive = exclusif ;
   this.autoDelete = autoDelete ;
   this.arguments = arguments != null ? arguments : nouveau HashMap<>() ;
}

Introduction des paramètres :
1. nom : le nom de la file d’attente ;
2. actualName : Le vrai nom de la file d’attente, le paramètre de nom est utilisé par défaut, si le nom est vide, un nom est généré selon les règles ;
3. durable : s’il est persistant ;
4. Exclusif : qu’il soit exclusif ou exclusif ;
5. autoDelete : suppression automatique ou non ;
6. Arguments : Les autres paramètres d’attributs de la file d’attente ont les options suivantes, voir Arguments à la Figure 2 :
(1) x-message-ttl : le temps d’expiration du message, en millisecondes ;
(2) x-expires : temps d’expiration de la file d’attente, combien de temps la file sera supprimée si elle n’est pas accédée, unité : millisecondes ;
(3) longueur maximale x : la longueur maximale de la file d’attente, si elle dépasse la valeur maximale, le message sera supprimé de l’en-tête de la file d’attente ;
(4) x longueur-maximum-octets : le contenu du message de la file occupe l’espace maximal, limité par la taille de la mémoire, et s’il dépasse ce seuil, le message sera supprimé de l’en-tête de la file d’attente ;
(5) x-débordement : Définir le comportement de débordement de file d’attente. Cela détermine ce qu’il advient du message lorsque la longueur maximale de la file d’attente est atteinte. Les valeurs valides sont drop-head, reject-publish, ou reject-publish-dlx. Les types de files d’attente de quorum ne supportent que le drop-head ;
(6) échange de lettres mortes x : le nom de l’échange de lettres mortes, ainsi que les messages expirés ou supprimés (en raison de la longueur longue de la file ou de l’espace dépassant le seuil) peuvent être spécifiés pour être envoyés à la centrale ;
(7) clé de routage de lettre morte x : La clé de routage du message de lettre morte, qui sera utilisée lorsque le message est envoyé à l’échangeur de lettres mortes, si elle n’est pas définie, la valeur de la clé de routage originale du message sera utilisée
(8) x-single-actif-consommateur : indique si la file d’attente est un seul consommateur actif, si c’est vrai, un seul consommateur du groupe de consommateurs enregistrés consomme des messages, les autres sont ignorés, et faux lorsque le message est distribué à tous les consommateurs dans une boucle (fausse par défaut)
(9) priorité x-max : le nombre maximal de priorités à supporter par la file d’attente ; Si elle n’est pas activée, la file ne supportera pas la priorité des messages ;
(10) mode file x (mode paresseux) : Régler la file en mode délai, garder autant de messages que possible sur le disque pour réduire l’utilisation de la RAM ; Si elle n’est pas définie, la file conservera un cache mémoire pour livrer les messages aussi rapidement que possible ;
(11) x-queue-maître-locateur : Définir l’information du nœud maître de la file miroir en mode cluster.


Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com