За допомогою MSMQ (Microsoft Message Queue) розробники додатків можуть зручно швидко та надійно спілкуватися з додатками, надсилаючи та отримуючи повідомлення. Обробка повідомлень надає надійний безвідмовний метод для гарантованого обміну повідомленнями та виконання багатьох бізнес-процесів.
MSMQ, як і XML Web Services та .Net Remoting, є технологією розподіленої розробки. Однак при використанні XML Web Services або компонентів .Net Remoting клієнт повинен обмінюватися інформацією з сервером у реальному часі, а сервер має залишатися онлайн. MSMQ може працювати, коли сервер офлайн, тимчасово зберігаючи повідомлення в черзі повідомлень на стороні клієнта, а потім надсилаючи його на сервер для обробки, коли воно онлайн.
Очевидно, що MSMQ не підходить для ситуації, коли клієнт має своєчасно відповідати з сервера, а MSMQ взаємодіє з сервером асинхронно, тому немає потреби довго чекати обробки сервера.
Хоча і XML Web Services, і .Net Remoting надають властивість [OneWay] для обробки асинхронних викликів, вона використовується для вирішення проблеми довгих викликів методів на стороні сервера, які довго блокували клієнтську сторону. Однак це не може вирішити проблему великого навантаження на клієнта, і сервер приймає запити швидше, ніж обробляє.
Загалом, атрибут [OneWay] не використовується у спеціалізованих сервісах обміну повідомленнями.
1. Основні терміни та поняття
«Повідомлення» — це одиниця даних, яка передається між двома комп'ютерами. Повідомлення можуть бути дуже простими, наприклад, містити лише текстові рядки; Він також може бути складнішим і містити вбудовані об'єкти.
Повідомлення надсилаються до черги. «Черга повідомлень» — це контейнер, який зберігає повідомлення під час їх передачі. Менеджер черги повідомлень виступає посередником при передачі повідомлень від джерела до пункту призначення. Головна мета черги — забезпечити маршрутизацію та гарантувати доставку повідомлень; Якщо отримувач недоступний на момент відправлення повідомлення, черга повідомлень утримує повідомлення до успішної доставки.
«Черга повідомлень» — це технологія обробки повідомлень компанії Microsoft, яка забезпечує можливості обробки повідомлень і створення черги для будь-якого додатку на будь-якій комбінації комп'ютерів із встановленою Microsoft Windows, незалежно від того, чи знаходяться вони в одній мережі чи онлайні одночасно.
«Мережа черги повідомлень» — це будь-яка група комп'ютерів, які можуть передавати повідомлення один одному. Різні комп'ютери в мережі відіграють різні ролі у забезпеченні плавної обробки повідомлень. Деякі з них надають інформацію про маршрутизацію для визначення способу надсилання повідомлень, деякі містять важливу інформацію про всю мережу, а деякі просто надсилають і отримують повідомлення.
Під час встановлення черги повідомлень адміністратори визначають, які сервери можуть взаємодіяти між собою, і встановлюють спеціальні ролі для конкретних серверів. Комп'ютери, що складають цю мережу «черг повідомлень», називаються «сайтами» і з'єднані між собою «посиланнями на сайт». Кожне sitelink має відповідний «накладний витрат», який визначається адміністратором і показує, як часто повідомлення надходять через це посилання.
Адміністратор черги повідомлень також налаштовує один або кілька комп'ютерів у мережі, які виконують функції серверів маршрутизації. Сервер маршрутизації аналізує накладні витрати кожного sitelink, щоб визначити найшвидший і найефективніший спосіб доставки повідомлення через кілька сайтів і визначити, як його доставити.
2. Тип черги
Існує два основних типи черг: черги, створені вами або іншими користувачами у вашій мережі, та системні черги.
Черга, створена користувачем, може бути будь-якою з наступних:
Публічні черги реплікуються по всій мережі черги повідомлень і можуть бути доступні всіма сайтами, підключеними до мережі.
Приватні черги не публікуються по всій мережі. Натомість вони доступні лише на місцевому комп'ютері, де вони проживають. Приватні черги доступні лише для додатків, які знають повну назву шляху або мітку черги.
Керуюча черга містить повідомлення, які підтверджують отримання повідомлень, надісланих у заданій мережі черги повідомлень. Вкажіть чергу управління, яку компонент MessageQueue має використовувати, якщо він є.
Черга відповіді містить повідомлення відповіді, які повертаються до додатку-відправника, коли цільовий додаток отримує повідомлення. Вкажіть чергу відповідей, яку ви хочете, щоб компонент MessageQueue використовував, якщо він є.
Черги, які генерує система, зазвичай поділяються на такі категорії:
Journal Queue за бажанням зберігає копії надісланих повідомлень і копії видалених із черги. Одна черга журналу на кожному клієнті черги повідомлень зберігає копію повідомлень, надісланих з цього комп'ютера. Для кожної черги на сервері створюється окрема щоденнична черга. Цей журнал відстежує повідомлення, які видаляються з цієї черги.
Черга мертвих листів зберігає копії повідомлень, які не можуть бути доставлені або мають прострочений термін дії. Якщо повідомлення, яке закінчується або не може бути доставлене, є транзакційним, воно зберігається у спеціальній черзі мертвих літер, яка називається «транзакційною чергою мертвих літер». Мертві листи зберігаються на комп'ютері, де знаходиться прострочене повідомлення. Для детальнішої інформації про повідомлення про тайм-аут і закінчення терміну дії дивіться у розділі «Властивості повідомлення за замовчуванням».
Черга звітів містить повідомлення, які вказують маршрут для досягнення пункту призначення, а також можуть містити тестові повідомлення. На кожному комп'ютері може бути лише одна черга звітів.
Спеціалізована системна черга — це серія виділених черг, які зберігають управлінські та сповіщення, необхідні системі для виконання операцій обробки повідомлень.
Більшість роботи в додатку пов'язана з доступом до публічних черг і їхніх повідомлень. Однак, залежно від щоденного ведення журналу, підтвердження та інших спеціальних потреб у обробці, ймовірно, у щоденних операціях буде використовуватися кілька різних системних черг.
3. Синхронна проти асинхронної комунікації
Комунікація в черзі є за своєю суттю асинхронною, оскільки надсилання та отримання повідомлень з черги здійснюється в різних процесах. Також операція отримання може бути виконана асинхронно, оскільки особа, яка хоче отримати повідомлення, може викликати метод BeginReceive у будь-яку чергу і одразу продовжити виконувати інші завдання, не чекаючи відповіді. Це дуже відрізняється від того, що люди називають «синхронною комунікацією».
У синхронній комунікації відправник запиту повинен чекати відповіді від призначеного отримувача, перш ніж виконувати інші завдання. Час, який відправник чекає, повністю залежить від часу, необхідного отримувачу для обробки запиту та надсилання відповіді.
4. Взаємодія з чергами повідомлень
Обробка повідомлень і обмін повідомленнями забезпечують потужний і гнучкий механізм міжпроцесної комунікації між серверними компонентами додатків. Вони пропонують кілька переваг порівняно з прямим викликом між компонентами, зокрема:
Стабільність – Відмови компонентів впливають на повідомлення значно менше, ніж прямі дзвінки між компонентами, оскільки повідомлення зберігаються в черзі і залишаються там до належної обробки. Обробка повідомлень схожа на обробку транзакцій тим, що обробка повідомлень гарантована. Пріоритетність повідомлень – Більш термінові або важливі повідомлення можна отримати раніше за відносно незначні, щоб гарантувати достатній час відповіді для критичних застосувань. Офлайн-можливість – Коли повідомлення надсилаються, їх можна відправити у тимчасову чергу, і вони залишаються там до успішної доставки. Коли доступ до бажаної черги недоступний з будь-якої причини, користувач може продовжити дії. Водночас інші операції можуть продовжуватися так, ніби повідомлення оброблене, оскільки доставка повідомлення гарантована при відновленні мережевого з'єднання. Транзакційна обробка повідомлень – Об'єднайте кілька пов'язаних повідомлень в одну транзакцію, щоб гарантувати, що повідомлення доставляються послідовно, лише один раз, і можуть бути успішно отримані з їхньої черги призначення. Якщо виникають помилки, вся транзакція скасовується. Безпека – технологія черги повідомлень, на якій базується компонент MessageQueue, використовує Windows Security для забезпечення контролю доступу, аудиту, а також шифрування та автентифікації повідомлень, надісланих і отриманих компонентом.
5. Написати просту програму для черги повідомлень у середовищі .Net
(1) Спочатку встановити сервіси черги повідомлень
Встановіть MSMQ через Панель керування, крок «Додати/Видалити програми» – «Додати/Видалити компоненти Windows».
MSMQ можна встановити як у режимі робочої групи, так і в доменному режимі. Якщо інсталятор не знаходить сервер із чергою повідомлень, що надає служби каталогу, його можна встановити лише в режимі робочої групи, і черга повідомлень на цьому комп'ютері підтримує лише створення приватних черг і прямих підключень до інших комп'ютерів, що виконують черги повідомлень.
(2) Налаштувати MSMQ
Відкрити управління комп'ютером – Поставити в чергу повідомлення та створити чергу MSMQDemo у розділі Приватні черги
(3) Написати код — просто продемонструвати об'єкт MSMQ
Клас MessageQueue — це обгортка навколо «черги повідомлень». Клас MessageQueue надає посилання на чергу Message Queue. Ви можете вказати шлях до існуючого ресурсу в конструкторі MessageQueue або створити нову чергу на сервері. Перш ніж викликати Відправити, Підглянути або Прийняти, потрібно асоціювати новий екземпляр класу MessageQueue з існуючою чергою.
MessageQueue підтримує два типи пошуку повідомлень: синхронне та асинхронне. Синхронізовані методи Peek і Receive змушують потік процесу чекати на прибуття нового повідомлення в чергу у визначений проміжок часу. Асинхронні методи BeginPeek і BeginReceive дозволяють основному задачі додатку продовжувати виконання в окремому потоці до того, як повідомлення потрапить у чергу. Ці методи працюють шляхом використання об'єктів зворотного виклику та об'єктів стану для полегшення інформаційної передачі між потоками.
Завантаження вихідного коду:
Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласка Відповідь
|