Zostałem poproszony przez kierownika zespołu o zbadanie MSMQ jako opcji dla nowej wersji naszego produktu. Używamy SQL Service Broker w naszej aktualnej wersji. Zrobiłem sporo eksperymentów i Googling, aby znaleźć produkt, który jest lepszy dla moich potrzeb, ale pomyślałem, że poprosiłbym o najlepszą stronę, którą znam do programowania odpowiedzi.Czy powinienem używać MSMQ lub SQL Service Broker dla transakcji?
Niektóre szczegóły:
- Nasz klient jest .NET 1.1 i 2.0 kodu; to jest miejsce, z którego zostanie wysłana wiadomość.
- Cel w wystąpieniu programu SQL Server 2005. Wszystkie wiadomości kończą się aktualizacjami bazy danych lub wstawkami.
- Wyślemy kilka aktualizacji, które należy traktować jako transakcję.
- Musimy mieć doskonałą możliwość odzyskania wiadomości; żadne wiadomości nie mogą zostać utracone.
- Musimy być asynchroniczni i być w stanie akceptować wiadomości nawet wtedy, gdy docelowy serwer SQL nie działa.
- Opracowanie własnego rozwiązania kolejkowania nie jest opcją; jesteśmy małym zespołem.
Czego odkryliśmy do tej pory:
- Zarówno MSMQ i SQL Service Broker może wykonać pracę.
- Wygląda na to, że broker usług jest szybszy w przypadku wiadomości transakcyjnych.
- Service Broker wymaga serwera SQL działającego gdzieś, podczas gdy MSMQ potrzebuje jakiejkolwiek skonfigurowanej maszyny Windows uruchomionej gdzieś.
- MSMQ wydaje się być lepszy/szybszy/łatwiejszy do skonfigurowania/uruchomienia w klastrach.
Czy czegoś brakuje? Czy jest tu wyraźny zwycięzca? Wszelkie myśli, doświadczenia i linki będą cenione. Dziękuję Ci!
EDYCJA: Skończyło się trzymanie brokera usług, ponieważ mamy niestandardową strukturę DB używaną w niektórych z naszych kodów klienta (lepiej radzimy sobie z transakcjami). Ten kod przechwycił SQL dla transakcji, ale nie. Kod klienta był również w wersji 1.1 systemu .NET, więc musielibyśmy zaktualizować cały kod klienta. Dzięki za pomoc!
Jeśli kod klienta działa na komputerze innym niż serwer bazy danych, należy przetestować scenariusz wycofania. Wpadłem na problemy, w których gdy przetwarzałem kolejkę i musiałem coś zawieść, ponieważ zdalny punkt końcowy był nieczynny, skończyłoby mi się usunięcie kolejki w brokerze usług, ponieważ może obsłużyć tylko 5 awarii, zanim przejdzie w tryb offline. Aby obejść ten problem, musiałem wyłączyć transakcje dla Service Broker i polegać na obsłudze wyjątków w kodzie, co oznacza, że pod pewnymi błędami całkowicie straciłbym wiadomość. –
Jaki był ostateczny wybór? To jest, jeśli nie jest za późno, aby zapytać :). –
@ Coon: Skończyło się na tym, że korzystaliśmy z SQL Service Broker i działało dobrze (jak wspomniałem w powyższej edycji).To był dla nas lepszy wybór w tym czasie, choć myślę (między tymi dwoma) użyłbym MSMQ, gdybym miał odbudować system od zera. –