Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 44647|Отговор: 8

[WinForm] rabbitMQ Опашка за опашка Запазване на съобщенията [с изходен код]

[Копирай линк]
Публикувано в 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# (делегат, Действие, Функ, предикат)
Публикувано в 9.04.2018 г. 13:17:51 ч. |
Научи се да учиш
Публикувано в 25.06.2019 г. 23:22:47 ч. |
Научи се да учиш
Публикувано в 29.06.2019 г. 9:36:23 ч. |
Защо не видях демото, трябва да отговоря, за да го видя
Публикувано в 9.07.2019 г. 17:34:42 ч. |
Искам изходен код на C#
Публикувано в 24.07.2019 г. 14:21:51 ч. |
Добре е, точно това, от което имам нужда
Публикувано в 11.04.2020 г. 14:34:54 ч. |
Научи го
Публикувано в 1.01.2022 г. 14:45:24 ч. |
1111111111111111
 Хазяин| Публикувано в 3.05.2023 г. 22:12:22 ч. |
Параметри на опашката на RabbitMQ и техните значения


/**
* Конструирайте нова опашка, с име, флаг за издръжливост, флаг за автоматично изтриване и аргументи.
* @param назове името на опашката - не трябва да е нулево; Задайте на "", за да може брокерът да генерира името.
* @param е устойчиво, ако обявяваме опашка за издръжливост (опашката ще оцелее след рестарт на сървъра)
* @param ексклузивно вярно, ако обявяваме изключителна опашка (опашката ще се използва само от деклариращите)
* връзка)
* @param autoDelete true, ако сървърът трябва да изтрие опашката, когато вече не се използва
* @param аргументите, използвани за обявяване на опашката
*/
public Queue (Име на низ, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> argument) {
   Assert.notNull (име, "име" не може да бъде null");
   this.name = име;
   this.actualName = StringUtils.hasText(name) ? Име
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   това.издръжливо = издръжливо;
   this.exclusive = ексклузивно;
   this.autoDelete = autoDelete;
   това.аргументи = аргументи != null ? аргументи: нов HashMap<>();
}

Въвеждане на параметри:
1. Име: Името на опашката;
2. actualName: Истинското име на опашката, параметърът на името се използва по подразбиране; ако името е празно, се генерира според правилата;
3. издръжливост: дали е устойчива;
4. Ексклузивно: независимо дали е изключително или ексклузивно;
5. autoDelete: дали да се изтрие автоматично;
6. Аргументи: Други атрибутни параметри на опашката имат следните опции, вижте Аргументи на Фигура 2:
(1) x-message-ttl: времето на изтичане на съобщението, в милисекунди;
(2) x-expire: време за изтичане на опашката, колко дълго опашката ще бъде изтрита, ако не бъде достъпена, единица: милисекунди;
(3) x-max-length: максималната дължина на опашката, ако тя надвиши максималната стойност, съобщението ще бъде изтрито от заглавието на опашката;
(4) x-max-length-bytes: съдържанието на съобщението в опашката заема максималното пространство, ограничено от размера на паметта, и ако надвиши този праг, съобщението ще бъде изтрито от заглавието на опашката;
(5) x-overflow: Задайте поведението за препълване на опашка. Това определя какво се случва със съобщението, когато се достигне максималната дължина на опашката. Валидните стойности са drop-head, reject-publish или reject-publish-dlx. Типовете опашки за кворум поддържат само drop-head;
(6) x-dead letter-exchange: името на обмена с мъртви букви и съобщенията, които са изтекли или изтрити (поради дългата опашка или разстоянието, надвишаващо прага), могат да бъдат посочени за изпращане към централата;
(7) x-мъртъв-буквен ключ за маршрутизиране: Ключът за маршрутизиране на съобщението с мъртва буква, който ще се използва, когато съобщението се изпрати към обменника на мъртви букви, ако не е зададено, ще се използва оригиналната стойност на ключа за маршрутизиране на съобщението
(8) x-single-active-consumer: показва дали опашката е един активен потребител; ако е вярно, само един потребител в регистрираната потребителска група консумира съобщения, останалите се игнорират, и е невярно, когато съобщението се разпространява до всички потребители в цикъл (по подразбиране false)
(9) x-max-priority: максималният брой приоритети, които трябва да се поддържат от опашката; Ако не е настроена, опашката няма да поддържа приоритет на съобщенията;
(10) x-queue-mode(Мързелив режим): Настройте опашката в режим на забавяне, запазете колкото се може повече съобщения на диска, за да намалите използването на RAM; Ако не е настроена, опашката ще запази кеш в паметта, за да доставя съобщенията възможно най-бързо;
(11) x-queue-master-locator: Задайте главната информация за възела на огледалната опашка в клъстерен режим.


Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com