2010-11-30 12 views
12

Ich habe ein verteiltes System, wo es 1 SQL Server, 1-n verarbeitende Server und 1-n Datenlieferanten (Hardware-Geräte über das Netzwerk) sein wird. Die Daten, die geliefert werden, müssen verarbeitet werden, bevor sie in die relationale DB-Struktur gehen - ausgeführt von den Verarbeitungsservern (als Windows-Dienste - .net-Code, um die Daten zu analysieren, zu verarbeiten und in die relationale Struktur einzufügen).
zu handhaben die potenzielle Last und nicht verlangsamen die Datenlieferanten, ich möchte eine Warteschlange implementieren, aber ich bin mir nicht sicher, ob ich die Komplexität eines MSMQ-Servers zu der Mischung hinzufügen möchte. Gibt es eine gute Alternative zu MSMQ, wie die Verwendung der DB (eine flache Tabelle) als die Warteschlange? Bietet .NET eine sofort einsatzfähige Unterstützung für DB-Warteschlangen oder gibt es eine weitere Option für zuverlässiges Einreihen?zu MSMQ oder nicht zu MSMQ? (oder SQL-Tabelle als Warteschlange)


Dank

EDIT: (29. November, 11.30 Uhr)
klingt wie SQL Service Broker (SSB) könnte den Trick tun.
http://www.netframeworkdev.com/windows-communication-foundation/service-broker-vs-msmq-as-reliable-queueing-mechanism-63981.shtml

EDIT: (30. November, 07.45 Uhr)
Gefunden eines anderen sehr nützlichen Link zu diesem Thema:
http://social.msdn.microsoft.com/Forums/en-US/sqlservicebroker/thread/52687510-0852-44f3-bfcd-83610d1c1b9a
Ich bin auch in die max/min Größe der Daten suchen, wird geliefert. Kennen Sie die maximale Größe von MSMQ und/oder SSB?
MSMQ: 4MB Nachrichtengröße
SSB:

EDIT Größe 2GB Nachricht: (30. November, 8; 15am) hier
Großer Vergleich zwischen MSMQ & SSB:
Good Strategy for Message Queuing?

Antwort

4

Ich würde verwenden MSMQ, fügt nicht so viel Komplexität hinzu, und es ist so einfach, die Nachrichten zu sichern, so kann die Verarbeitung auch nach einem Systemneustart fortgesetzt werden. Sie könnten etwas wie SSB verwenden.

+2

Verwenden Sie insbesondere Transaktions-MSMQ. – Steven

2

Von den beiden Optionen ist MSMQ eigentlich die vereinfachende. Wenn Sie die Möglichkeit haben, die Arbeit neu zu priorisieren, oder wenn Verarbeitungsagenten nur bestimmte Arten von Jobs in der Warteschlange auswählen, können Sie MSMQ nicht verwenden. Wenn Sie keine dieser Schnickschnack brauchen, dann ist MSMQ Kuchen mit .NET zu verwenden.

+1

Sie können durch eine MSMQ-Warteschlange iterieren, die nur einige Nachrichten verarbeitet: 'MessageQueue.CreateCursor' und dann' Peek'- und 'Receive'-Überladungen verwenden, die einen Cursor enthalten. – Richard

+1

Sie würden besser getrennte Warteschlangen für jeden Nachrichtentyp haben, wenn Sie bestimmte Nachrichtentypen auswählen und verarbeiten möchten. –

+0

@Richard ist die "Priorisierung", die Sie nicht wirklich tun können. – StingyJack