MSMQ для настойчивости? - PullRequest
       6

MSMQ для настойчивости?

5 голосов
/ 07 ноября 2011

В моем проекте я получаю транзакцию от клиента, затем обрабатываю ее и возвращаю статус обратно клиенту через WCF.Как вы знаете, я должен как-то сохранить транзакцию для восстановления и сохранения.

Я думаю об использовании MSMQ для этой цели.Когда транзакция начнется, я «сохраню» ее в MSMQ (сохранение базы данных произойдет в пакете по соображениям производительности).

Подойдет ли MSMQ для этого?Знаете ли вы лучший способ создать постоянство?Каков наилучший способ «сделать резервную копию» транзакции и сохранить высокую производительность?

Ответы [ 3 ]

5 голосов
/ 07 ноября 2011

При выборе технологии, я думаю, полезно учитывать не только может технологию удовлетворить ваши потребности, но и то, была ли она разработана для удовлетворения ваших потребностей.Под этим я подразумеваю, что вы должны выбрать лучший вариант, а не только первый, который кажется достаточно хорошим.Вероятно, вы могли бы решить эту проблему с помощью ведения журнала или текстовых файлов или с помощью различных других средств, но это не значит, что вы должны.

Мой порядок предпочтений в этой ситуации будет

  1. база данных
  2. MSMQ
  3. все остальное

Если по какой-либо причине невозможно сохранить транзакции в базе данных, MSMQ, возможно, поможет вам в этом.Он должен работать лучше, чем открытие соединения с базой данных и фиксация, но обеспечивает «хороший» уровень персистентности.Недостатком является то, что это больше кода и еще одна точка сбоя для вашего приложения (не то, что оно потерпит неудачу, если написано правильно, но больше кода означает больше мест для ошибок).

Вы можете бросить свои транзакции в очередь оченьлегко использовать что-то вроде этого

private string queuePath = @".\Private$\myQueue";
MessageQueue queue = new MessageQueue(queuePath);

Message message = new Messge();
message.Id = "messageId";
message.Body = "my content";

queue.Send(message, transaction);
transaction.Complete();
queue.Close();

, а затем получить их позже с помощью запроса свойств: MSMQ-запрос определенного сообщения .Есть много других функциональных возможностей, но не усложняйте их.

Некоторые соответствующие вопросы:

3 голосов
/ 07 ноября 2011

Я думаю, что вы ищете SQL Server Service Broker .Все, что 10 лет назад мы делали с MSMQ, мы делаем сейчас с Service Broker.Хорошо работает.

2 голосов
/ 07 ноября 2011

Популярный подход, используемый базами данных и файловыми системами, называется Write-Ahead Logging.Это, однако, не тривиально для реализации.Вы можете найти подробности здесь ...

Википедия: Запись в журнале записи

...