2014-01-18 10 views
8

Ich bin neu bei Azure Service Bus und habe erfolgreiche Pocs zum Erstellen eines Themas und eine separate Subskribentenanwendung zum Empfangen der Nachricht erstellt.Azure Service Bus - Abonnenten können unabhängig voneinander ein Abonnement abonnieren und dieselbe Nachricht teilen?

zu diesem Artikel Auf der Grundlage, ich zitiere: „Ein Thema, bis zu 2.000 Abonnements mit zugeordnet sein können, von denen jede unabhängige Kopien aller zum Thema gesendeten Nachrichten wird ein oder mehrere Teilnehmer eine unabhängig abonnieren können. Abonnement und konkurrieren für Nachrichten von ihm. "

http://convective.wordpress.com/2011/06/08/windows-azure-appfabric-service-bus-queues-and-topics/

Was mich interessiert zu tun, ist dies für mehrere Anwendungen zu erweitern, unabhängig zu demselben Thema zu abonnieren, aber nicht für sie konkurrieren.

Mein aktuelles Postfach enthält einen Absender und zwei separate Anwendungen, die dasselbe Thema abonniert haben. Das Verhalten, das ich sehe, ist, dass, wenn ich eine Nachricht vom Absender einsende, eine der zwei laufenden abonnierenden Anwendungen es erhalten wird; aber nicht der andere.

Meine Frage ist, ob mehrere unabhängige Anwendungen die gleiche Thema Nachricht erhalten können? Jeder Rat würde sehr geschätzt werden!

Antwort

18

Wenn Sie ein Abonnement für ein Thema erstellen, hat es einen spezifischen Abonnementnamen. Jeder Verbraucher, der daraufhin Nachrichten für diesen Abonnementnamen anfordert, wird um Nachrichten für dieses Abonnement konkurrieren. Wenn Sie möchten, dass unabhängige Anwendungen jeweils eine Kopie der an ein Thema gesendeten Nachricht erhalten, müssen sie jeweils ein eigenes Abonnement für das Thema erstellen. Sie können jedes Abonnement fast als eine Warteschlange betrachten, die sich selbst vom Thema versorgt.

Das Beispiel, das ich geben werde, ist von einem College. Das Thema ist "Neuer Student" und jede Abteilung innerhalb der Hochschule möchte eine Kopie einer Nachricht für einen neuen Schüler erhalten. Somit hätte jede Abteilung ein eigenes Abonnement. Es würde "Musik", "Billings", "Wissenschaft", "Math" -Abonnements, etc. geben. Jeder von ihnen abonniert das Thema "Neuer Student". Auf diese Weise erhält jede Abteilung eine Kopie der neuen Schülermitteilung oder kann sogar nach Dingen filtern, die ihnen wichtig sind. Wenn die Abteilung bei der Verarbeitung zurückbleibt, kann sie weitere Instanzen des Prozessors mit dem Namen ihres Abonnements hochfahren, wodurch ihr Durchsatz in der Theorie erhöht wird, da dann mehr Konsumenten um die Nachrichten in ihrem Abonnement konkurrieren.

In Ihrem Beispiel müsste also jede Anwendung entweder ein eigenes Abonnement erstellen oder ein einmaliges Abonnement erhalten, mit dem sie beim Start beginnen kann. Beachten Sie Folgendes: Wenn Sie die Laufzeit der Anwendung über die Lebensdauer eines Abonnements entscheiden lassen (dh Sie erstellen ein Abonnement beim Start der App und zerstören es, wenn die App geschlossen wird), müssen Sie beachten, dass Nachrichten ohne aktive Abonnements an das Thema gesendet werden wird einfach verloren sein. Sie können jedoch ein catch all-Abonnement erstellen, das nur Nachrichten empfängt, die nicht an ein anderes Abonnement übermittelt werden. Es hängt wirklich davon ab, was Sie erreichen möchten.

+0

Hallo MikeWo, Danke für die Erklärung. – Heretix

+1

@mikewo, wenn Sie sagen, "wenn es keine aktiven Abonnements gibt, dann werden Nachrichten, die an das Thema gesendet werden, einfach verloren gehen", hängt das nicht von der Lebenszeit der Nachricht ab? Auch wenn keine aktiven Abonnements vorhanden sind und dem Thema eine Nachricht hinzugefügt wird, was passiert, wenn eine Anwendung das Thema abonniert, bevor die Nachricht abläuft? Würde es nicht erhalten? Danke für die Post. Es ist sehr hilfreich. –

+1

@NoelAbrahams Nein. Wenn keine Subskriptionen vorhanden sind und eine Nachricht an das Thema gesendet wird, geht das System davon aus, dass es niemanden interessiert und behält die Nachricht nicht bei.Der Ablauf der Nachricht bezieht sich auf die Zustellung an eine wartende Warteschlange/ein Abonnement. Die Standardzeit, die für eine Nachricht für eine Warteschlange oder ein Thema benötigt wird, ist "Zeitspannen.Maxwert". Wenn die Theorie also so funktioniert, wie Sie danach gefragt haben, waren sie immer in der Nähe, bis jemand sie abonniert hat. – MikeWo

Verwandte Themen