NET та C#,Транзакційні черги

У разі відновлюваних повідомлень немає гарантії їх доставки в тому порядку, в якому вони були відправлені, а також у тому, що доставка буде одноразовою. Збої в мережі можуть призвести до багаторазової доставки одних і тих самих повідомлень; це трапляється і тоді, коли відправник та одержувач мають кілька встановлених протоколів, які використовуються Message Queuing.

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

повідомлення повинні з'являтися в порядку, в якому були відправлені;

повідомлення мають з'являтися один раз.

У разі транзакційних черг одна транзакція не охоплює надсилання та отримання повідомлень. Природа Message Queuing така, що між надсиланням та отриманням повідомлення може пройти досить тривалий час. На відміну від цього, транзакції мають бути короткочасними. У Message Queuing перша транзакція використовується для надсилання повідомлення в чергу, друга для передачі його по мережі і третя для отримання повідомлення.

У наступному прикладі демонструється створення транзакційної черги повідомлень, а також надсилання повідомлення з використанням транзакції. Транзакційна черга повідомлень створюється передачею true у другому параметрі методу MessageQueue.Create():

Якщо в чергу необхідно записувати відразу кілька повідомлень у межах однієї транзакції, то для цього доведеться створити екземпляр об'єктаMessageQueueTransaction та викликати його метод Begin(). Після завершення надсилання всіх повідомлень, що стосуються транзакції, слід викликати метод Commit() того ж об'єкта MessageQueueTransaction. Для скасування транзакції (не залишаючи жодних повідомлень у черзі) має бути викликаний метод Abort(), що робиться у блоці catch.