2011-11-06 14 views
5

W moim projekcie otrzymuję transakcję od klienta, a następnie przetwarzam ją i zwracam status z powrotem do klienta za pośrednictwem WCF. Jak wiesz, muszę jakoś zapisać transakcję w celu odzyskania i trwałości.MSMQ dla trwałości?

Mam na myśli wykorzystanie MSMQ do tego celu. Kiedy transakcja się rozpocznie, "zapiszę" ją na MSMQ (zapis bazy danych nastąpi w partii z powodów związanych z wydajnością).

Czy MSMQ jest dobre do tego? Czy znasz lepszy sposób tworzenia trwałości? Jaki jest najlepszy sposób "wykonania kopii zapasowej" transakcji i utrzymania wysokiej wydajności?

+0

MSMQ na prezydenta! – stefan

Odpowiedz

5

podczas wybierania technologii myślę, że to pomocne pod uwagę nie tylko może technologia swoich potrzeb, ale także tego, czy był to zaprojektowany do swoich potrzeb. Rozumiem przez to, że należy wybrać najlepszą opcję, a nie tylko pierwszą opcję, która wydaje się wystarczająco dobra. Prawdopodobnie możesz rozwiązać ten problem, logując się, zapisując pliki tekstowe lub w inny sposób, ale to nie znaczy, że powinieneś.

Moje zamówienie preferencji w tej sytuacji byłoby

  1. bazie
  2. MSMQ
  3. wszystko

Jeśli nie jest to możliwe, aby zapisać do bazy danych transakcji z jakiegokolwiek powodu następnie MSMQ może ci w tym pomóc. Powinien działać lepiej niż otwarcie połączenia z bazą danych. & Zaangażowanie zapewnia jednak "dobrą" warstwę utrwalania. Minusem jest to, że jest to więcej kodu i kolejny punkt awarii dla twojej aplikacji (nie, że to się nie powiedzie, jeśli zostanie napisane poprawnie, ale więcej kodu oznacza więcej miejsc na błędy).

Można rzucać swoje transakcje w kolejce bardzo łatwo za pomocą coś jak ten

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(); 

a następnie pobrać je później za pośrednictwem właściwości odpytywanie: MSMQ querying for a specific message. Istnieje wiele innych funkcjonalności po wyjęciu z pudełka, ale zachowaj to w prostocie.

Niektóre pytania dowiemy się z:

+0

Dziękuję, że to było bardzo pouczające – guyl

2

Popularnym podejściem stosowanym przez bazy danych i systemy plików jest rejestrowanie z wyprzedzeniem. Nie jest to jednak łatwe do wdrożenia. Szczegóły można znaleźć tutaj ...

Wikipedia: Write-Ahead Logging

+0

+1 za wprowadzenie wal. – guyl

+0

Czy możesz odpowiedzieć na http://stackoverflow.com/questions/9702379/queuing-in-oneway-wcf-messages-using-windows-service-and-sql-server? – Lijo

3

myślę szukasz SQL Server Service Broker. Wszystko, co 10 lat temu zrobiliśmy z MSMQ, teraz robimy z brokerem Service. To dobrze działa.

+0

Service Broker jest świetny, ale zależy od dostępności bazy danych i czasu odpowiedzi, co może być czymś, co OP stara się obejść. –

+0

Dotyczy to każdego kolejkowego systemu transakcyjnego, więc nie dotyczy konkretnego produktu. – Deleted

+0

@ChrisSmith Czy to było skierowane na mnie? Używaj wzmianki, więc otrzymuję powiadomienie :) W tym przypadku MSMQ będzie działał na samym serwerze, więc nie ma problemu z "dostępnością" - jeśli serwer internetowy jest w trybie online, tak samo jak magazyn wiadomości, a baza danych zazwyczaj działa na innym komputerze. Czas reakcji jest świetny, ponieważ MSMQ działa lokalnie, a baza danych może znajdować się gdzieś w połowie drogi na całym świecie. –