Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 44647|Відповідь: 8

[WinForm] rabbitMQ Queue Queue Persistence Message [з вихідним кодом]

[Копіювати посилання]
Опубліковано 09.04.2018 10:23:21 | | | |
За замовчуванням повідомлення черги rabbitMQ не зберігаються на жорсткому диску, що означає, що після перезапуску сервісу rabbitMQ повідомлення будуть втрачені.

Збереження черг

Наприклад, визначається збереження чергиdurableis встановлено на true, тобто це постійна черга, після перезапуску сервісу він також існуватиме, оскільки сервіс зберігає збережену чергу на жорсткому диску, а при перезапуску сервісу відновлює попередню збережену чергу. Чергу можна зберігати, але чи є повідомлення всередині постійними, залежить від налаштувань збереження повідомлення. Іншими словами, якщо в черзі не було надіслано жодного повідомлення до перезапуску, чи залишиться оригінальне повідомлення в черзі після перезапуску, залежить від налаштувань повідомлення, які виникли під час його відправлення.
Якщо ви хочете, щоб повідомлення залишалися постійними після перезавантаження, потрібно встановити ідентичність збереження повідомлення.

Налаштуйте збереження черги:




Четвертий параметр методу, autoDelete, зазвичай вводиться як false. Документація описує цей параметр, якщо він істинний, тобто якщо черга більше не використовується (не підписана), сервер її видаляє. Під час тестування, поки всі отримувачі черги змін з'єднання відключені, черга видаляється, навіть якщо в ній залишаються необроблені повідомлення. Перезавантаження RabbitMQ також їх видаляє. Якщо введено false, сервіс не видаляє чергу, і повідомлення в черзі існуватимуть, якщо всі клієнти, підключені до неї, відключені. Відправник також може помістити повідомлення в чергу змін, коли немає з'єднання з клієнтом, і коли клієнт з'являється, він отримає ці повідомлення. Однак, якщо сервіс RabbitMQ буде перезапущено, черга зникне, і повідомлення в ній природно зникнуть.

Третій параметр є ексклюзивним, і в документації зазначено, що якщо це правда, то з'єднання черги порушується, і черга видаляється, включно з повідомленнями всередині.

Другий параметр, стійкість, описаний у документації як такий, що якщо це істинно, він представляє постійну чергу, яка також існуватиме після перезапуску сервісу. Тому що сервіс зберігає постійну чергу на жорсткому диску, і при перезавантаженні сервісу він підтверджує цю чергу. Звісно, це має бути, коли і autoDelet, і exclusive є хибними. Чергу можна зберігати, але чи є повідомлення всередині постійними, залежить від налаштувань збереження повідомлення. Інакше кажучи, якщо в черзі ще залишаються повідомлення до перезапуску, чи існує оригінальне повідомлення в черзі після перезапуску, залежить від налаштувань відправника для повідомлення під час відправлення.


Після зміни коду ми намагаємося його запустити, і помилка буде такою:

Необроблений виняток: RabbitMQ.Client.Exceptions.OperationInterruptedException: Операція AMQP була перервана: AMQP close-reason, ініційована Peer, code=406, text="PRECONDITION_FAILED - нееквівалентний arg 'тривалий' для черги 'hello' у vhost 'myserver': отримано 'true', але current — 'false'", classId=50, methodId=10, cause=



Тому що ми визначили незбережену чергу, яку називають hello. RabbitMQ не дозволяє переосмислювати існуючі черги з іншими параметрами.

Існує два рішення:

1: Повторно оголосіть чергу з іншою назвою, наприклад my_queue
2: Видаліть визначену чергу «привіт» з адресою http://localhost:15672 та увійдіть за ім'ям користувача та паролем. Стандартний пароль і ім'я користувача для RabbitMQ — гість. Натисніть на стовпець «черга», щоб побачити список черги, натисніть на чергу «hello», щоб розширити деталі черги. Підтягніть сторінку до кінця, там є елемент «Видалити», натисніть на нього, натисніть кнопку «Видалити чергу», і ви зможете видалити чергу. Потім, коли код запускається, створюється черга hello, яка підтримує збереження.



Збереження повідомлень

Якщо ви хочете, щоб повідомлення залишалося постійним після перезавантаження, потрібно встановити його на збереження. Налаштування — це коли відправник надсилає повідомлення, що досить просто, і код виглядає так:


DeliveryMode за замовчуванням налаштований на 1, непостійний, а на 2 означає, що повідомлення залишається постійним

Після зміни коду ми намагаємося відкрити лише програму producer для надсилання повідомлень, потім перезапустити сервіс rabbitMQ, знову відкрити consumer і побачити, що повідомлення не втрачено.

(Кінець)

Додається вихідний код C#:

Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласкаВідповідь





Попередній:Повідомлення про виняток: "StrongTypingException: IsPrima...
Наступний:Вступ до делегатів C# (delegate, Action, Func, предикат)
Опубліковано 09.04.2018 13:17:51 |
Вчитися вчитися
Опубліковано 25.06.2019 23:22:47 |
Вчитися вчитися
Опубліковано 29.06.2019 09:36:23 |
Чому я не побачив демо, мушу відповісти, щоб побачити
Опубліковано 09.07.2019 17:34:42 |
Я хочу вихідний код на C#
Опубліковано 24.07.2019 14:21:51 |
Це добре, це саме те, що мені потрібно
Опубліковано 11.04.2020 14:34:54 |
Вивчи це
Опубліковано 01.01.2022 14:45:24 |
1111111111111111
 Орендодавець| Опубліковано 03.05.2023 22:12:22 |
Параметри черги RabbitMQ та їхні значення


/**
* Побудувати нову чергу з назвою, прапорцем стійкості, прапорцем автовидалення та аргументами.
* @param назвати назву черги — не повинна бути нульовою; встановіть "", щоб брокер згенерував ім'я.
* @param стійко, якщо ми оголошуємо довготривалу чергу (черга переживає перезапуск сервера)
* @param ексклюзивно істинно, якщо ми оголошуємо ексклюзивну чергу (черга використовується лише декларатором)
* зв'язок)
* @param autoDelete true, якщо сервер має видалити чергу, коли вона більше не використовується
* @param аргументи, які використовуються для оголошення черги
*/
публічна черга (ім'я рядка, булева довготривалість, булева ексклюзивність, булева автоматична видалення, відставка<рядок, об'єкт>аргументи) {
   Assert.notNull (name, «'name' не може бути null»);
   this.name = ім'я;
   this.actualName = StringUtils.hasText(name) ? Ім'я
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = довговічний;
   this.exclusive = ексклюзив;
   this.autoDelete = autoDelete;
   this.arguments = аргументи != null ? аргументи: новий HashMap<>();
}

Введення параметрів:
1. ім'я: назва черги;
2. actualName: Справжня назва черги, параметр імені використовується за замовчуванням; якщо ім'я порожнє, воно генерується відповідно до правил;
3. стійкість: чи є вона стійкою;
4. Ексклюзивна: чи є вона ексклюзивною чи ексклюзивною;
5. autoDelete: чи слід видаляти автоматично;
6. Аргументи: Інші параметри атрибутів черги мають такі опції, див. Аргументи на рисунку 2:
(1) x-message-ttl: час закінчення повідомлення в мілісекундах;
(2) x-expires: час закінчення черги, як довго черга буде видалена, якщо до неї не звернеться, одиниця: мілісекунди;
(3) x-max-length: максимальна довжина черги, якщо вона перевищує максимальне значення, повідомлення видаляється з заголовка черги;
(4) x-max-length-bytes: вміст повідомлення черги займає максимальний простір, обмежений розміром пам'яті, і якщо він перевищує цей поріг, повідомлення видаляється з заголовка черги;
(5) x-overflow: Встановіть поведінку переповнення черги. Це визначає, що відбувається з повідомленням при досягненні максимальної довжини черги. Допустимі значення — drop-head, reject-publish або reject-publish-dlx. Типи черги кворуму підтримують лише drop-head;
(6) x-мертвий обмін: назва обміну мертвими літерами та повідомлення, які закінчилися або були видалені (через довгу довжину черги або перевищення порогового простору), можуть бути вказані для передачі на біржу;
(7) x-dead-letter-routing-key: Ключ маршрутизації мертвого листа, який використовується при відправленні повідомлення обмінювачу мертвих літер, якщо не встановлено, буде використано оригінальне значення ключа маршрутизації повідомлення
(8) x-single-active-consumer: вказує, чи є черга єдиним активним споживачем; якщо це правда, то лише один споживач у зареєстрованій групі споживає повідомлення, інші ігноруються, і хибно, коли повідомлення розповсюджується всім споживачам у циклі (за замовчуванням неправди)
(9) x-max-priority: максимальна кількість пріоритетів, які підтримує черга; Якщо не встановлено, черга не підтримуватиме пріоритет повідомлення;
(10) x-queue-mode (Лінивий режим): Встановити чергу у режим затримки, зберігати якомога більше повідомлень на диску для зменшення використання оперативної пам'яті; Якщо не встановлено, черга зберігатиме кеш пам'яті для швидкої доставки повідомлень;
(11) x-queue-master-locator: Встановити інформацію про головний вузол дзеркальної черги в кластерному режимі.


Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com