Mit SignalR in der Azure-Worker-Rollen
Ich habe eine Azure-gehostete web-Anwendung, die arbeitet mit einer Anzahl von Instanzen der worker-Rolle. Derzeit ist die web-app geht die Arbeit für diese Arbeitnehmer durch das platzieren von Nachrichten in eine Azure-Warteschlange für die Arbeiter zu Holen. Die Arbeiter pass-status und Fortschritt-Nachrichten zurück, indem Sie Nachrichten in ein 'feedback' - Warteschlange. Im moment, um sich zu informieren meine browser-clients, wie die Fortschritte, die ich mache ajax-basierte periodische polling-rufe im browser zu einem MVC controller-Methode, die wiederum liest die Azure-feedback-queue und gibt diese Nachrichten als json an den browser zurück.
Offensichtlich, SignalR sieht aus wie eine sehr attraktive alternative zu dieser plumpen polling /queing Ansatz, aber ich habe sehr wenig Anleitung auf, wie man über das tun dies, wenn wir reden über mehrere worker-Rollen (im Gegensatz zu den web-Rolle) benötigen, senden Sie status an einzelne oder alle Kunden .
SignalR.WindowsAzureServiceBus von Clemens vasters sieht Super, lässt aber ein bisschen hoch und trocken am Ende also ein gutes Beispiel-Lösung fehlt.
Hinzugefügt Kommentar: Von meiner Lesung bisher scheint es, dass keine direkte Mitteilung Arbeiter Rolle (im Gegensatz zu web Rolle) browser-client über den SignalR-Ansatz möglich ist. Es scheint, dass die Arbeitnehmer für die Kommunikation mit dem web-Rolle mithilfe von Warteschlangen. Dies wiederum zwingt eine polling-Ansatz, D. H. die Warteschlangen müssen abgefragt werden, die für Nachrichten von den worker-Rollen - dieses polling stammt (aus gesteuert werden) aus dem browser-es erscheint (wie kann ein polling-Schleife eingerichtet werden, in eine web-Rolle?)
In der Zusammenfassung, SignalR, auch mit die SignalR.WindowsAzureServiceBus scale-out-Ansatz von Clemens Vasters, nicht in den Griff direkte Kommunikation von worker-Rolle zu browser.
Kommentare von den Experten geschätzt werden.
- Was war der leichteste Weg, Sie waren in der Lage, relais worker-role => webrole => client-browser?
- Als bacr beantwortet haben. Ich hatte auch multiplizieren worker-Rollen laufen als clients und die webrole kontrolliert Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie verwenden Sie Ihre worker-Rollen wie SignalR-clients, so dass Sie Nachrichten senden, um die web-Rolle (die SignalR server) und der web-Rolle wiederum weiterleiten von Nachrichten an clients.
Nutzen wir Azure Service Bus-Warteschlangen zum senden von Daten an unseren SignalR-web-Rollen, die dann nach vorne auf, um dem Kunden.
Die CAT-Seiten haben sehr gute Beispiele, wie Sie asynchrone Schleifen und Versand.
Beachten Sie meine Kenntnisse dieser beiden Technologien ist sehr basic, ich bin gerade erst anfangen. Und vielleicht habe ich deine Frage missverstanden, aber es scheint ziemlich offensichtlich für mich:
Web Rollen in der Lage sind, das abonnieren eines queue-server, wo die worker-Rolle Einlagen die Nachricht?. Wenn, so würde es keine client "zieht", wird die Warteschlange service bieten würde, die web-server-Seite code mit einer neuen Nachricht, und durch SignalR Sie schieben würde änderungen an den client ohne client-requests beteiligt. Die Kommunikation zwischen web-und worker-würde die gleiche bleiben (was meiner Meinung nach, es ist der richtige Weg, es zu tun).
Wenn Sie mit einer der SignalR-scaleout-backplanes können Sie erhalten Arbeiter reden an die angeschlossenen Kunden über Ihre web-Anwendung.
Gewusst wie: veröffentlichen von Nachrichten mit dem SignalR SqlMessageBus erklärt, wie dies zu tun.
Es auch links zu einem voll gearbeitet Beispiel, die zeigt ein Weg, dies zu tun.
Alternative message-bus-Produkte wie NServiceBus Wert sein könnte, zu untersuchen. NServiceBus hat die Fähigkeit, um Nachrichten asynchron über Prozessgrenzen hinweg, ohne die Notwendigkeit für polling.