|
|
Публикувано в 9.04.2018 г. 10:23:21 ч.
|
|
|
|

По подразбиране съобщенията в опашката rabbitMQ не се запазват на твърдия диск, което означава, че след рестартиране на услугата rabbitMQ съобщенията ще бъдат загубени.
Запазване на опашки
Например, се идентифицира устойчивостта на опашкатаDurableis е настроен на true, което означава, че е постоянна опашка, след като услугата бъде рестартирана, тя също ще съществува, защото услугата ще съхранява запазената опашка на твърдия диск, а когато услугата бъде рестартирана, ще възстанови това, което е било предишно опаснато. Опашката може да се запази, но дали съобщенията вътре са постоянни зависи от настройките за запазване на съобщението. С други думи, ако няма изпратено съобщение в опашката преди рестарта, дали оригиналното съобщение все още съществува в опашката след рестарта зависи от настройките на съобщението, които са възникнали при изпращането му. Ако искате да запазите съобщенията постоянни след рестарт, трябва да зададете идентичността, в която съобщението е запазено.
Настройте запазване на опашките:
Четвъртият параметър на метода, autoDelete, обикновено се въвежда като false. Документацията описва този параметър, ако е верен, което означава, че ако опашката вече не се използва (не е абониран), сървърът ще го изтрие. По време на моето тестване, докато всички получатели на опашката за промяна на връзката са прекъснати, опашката се изтрива, дори ако все още има необработени съобщения в нея. Рестартирането на RabbitMQ също ги премахва. Ако се въведе false, услугата няма да изтрие опашката и съобщенията в нея ще съществуват, ако всички клиенти, свързани с нея, са изключени. Изпращачът може също да постави съобщения в опашката за промяна, когато няма връзка с клиента, и когато клиентът се появи, ще получи тези съобщения. Въпреки това, ако услугата RabbitMQ бъде рестартирана, опашката ще изчезне, а съобщенията в нея естествено ще изчезнат.
Третият параметър е изключителен и документацията посочва, че ако е вярно, връзката на опашката е прекъсната, след което опашката се изтрива, включително съобщенията вътре.
Вторият параметър, устойчив, е описан в документацията като казващ, че ако е вярно, той представлява постоянна опашка, която ще съществува и след рестартирането на услугата. Защото услугата ще съхранява постоянната опашка на твърдия диск и при рестартиране ще потвърди тази опашка. Разбира се, трябва да е така, когато и автоматичното изтриване, и ексклузивното са фалшиви. Опашката може да се запази, но дали съобщенията вътре са постоянни зависи от настройките за запазване на съобщението. С други думи, ако все още има изпратени съобщения в опашката преди рестарта, дали оригиналното съобщение остава в опашката след рестарта зависи от настройките на подателя за съобщението при изпращането му.
След като променим кода, опитваме да го стартираме и грешката ще бъде следната:
Необработено изключение: RabbitMQ.Client.Exceptions.OperationInterruptedException: AMQP операцията беше прекъсната: AMQP close-reason, инициирана от Peer, code=406, text="PRECONDITION_FAILED - inequivalent arg 'издръжлив' за опашката 'hello' във vhost 'myserver': получено 'true', но текущото е 'false'", classId=50, methodId=10, cause=
Защото сме дефинирали неперсистентна опашка, наречена hello. RabbitMQ не позволява пренареждане на съществуващи опашки с различни параметри.
Има две решения:
1: Преобявете опашка с различно име, като my_queue 2: Изтрийте определената опашка "здравей" с адрес http://localhost:15672 и влезте с потребителско име и парола. Стандартната парола и потребителско име за RabbitMQ са гост. Кликнете върху колоната "опашка", за да видите списъка с опашки, кликнете върху опашката "здравей", за да разширите подробностите за опашката. Дръпнете страницата до края, там има елемент "Изтрий", кликни върху него, бутона "Изтрий опашка" и можеш да изтриеш опашката. След това, когато кодът се изпълни, се създава опашка за здравей, която поддържа устойчивост.
Запазване на съобщенията
Ако искате съобщението да остане постоянно след рестарт, трябва да го настроите да остане. Настройката е когато изпращачът го изпраща, което е сравнително просто, а кодът е следният:
DeliveryMode по подразбиране е на 1, непостоянен, а настройката на 2 означава, че съобщението е постоянно
След като променим кода, се опитваме да отворим само програмата producer, за да изпращаме съобщения, след което рестартираме услугата rabbitMQ, отваряме потребителя отново и установяваме, че съобщението не е изгубено.
(Край)
Приложен е изходният код на C#:
Туристи, ако искате да видите скритото съдържание на този пост, моля Отговор
|
Предишен:Съобщение за изключение: "StrongTypingException: IsPrima...Следващ:Въведение в делегатите по C# (делегат, Действие, Функ, предикат)
|