|
|
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ît Répondre
|
Précédent:Message d’exception : « StrongTypingException : IsPrima...Prochain:Introduction aux délégués C# (délégué, action, func, prédicat)
|