2016-08-04 34 views
0

TL; DR - Was ist der beste Weg, um RabbitMQ über REST API einem Verbraucher zugänglich zu machen?API-Design rund um RabbitMQ für Publisher/Abonnent

Ich erstelle eine API, um Nachrichten von RabbitMQ zu veröffentlichen und zu konsumieren. In meinem aktuellen Design wird der Publisher eine POST-Anfrage stellen. Meine API leitet die POST-Anfrage an die Vermittlungsstelle weiter. Auf diese Weise muss der Publisher die Serveradresse, den Namen usw. während der Veröffentlichung nicht kennen.

Jetzt ist der Consumer-Teil, wo ich nicht sicher bin, wie es weitergeht.

Am Anfang wird es keine Warteschlangen geben. Wenn ein neuer Verbraucher ein THEMA abonnieren möchte, erstelle ich eine Warteschlange und binde sie an die Börse. Ich brauche Hilfe mit Antworten auf einige Fragen -

  1. Sobald ich eine Warteschlange für den Verbraucher erstellen, was ist der nächste Schritt, um den Verbraucher Nachrichten aus dieser Warteschlange erhalten?
  2. Ich lasse den Verbraucher fragen nach einer Charge von Nachrichten (sagen wir 50 Nachrichten) aus der Warteschlange. Wenn ich dann vom Kunden eine Bestätigung erhalte, sende ich die nächsten 50 Nachrichten aus der Warteschlange. Wenn ich keine Bestätigung erhalte, setze ich die 50 Nachrichten zurück in die Warteschlange. Ist das nicht teuer in Bezug auf das Öffnen und Schließen der Verbindung zwischen dem Verbraucher und meiner API?

Wenn es ein besserer Ansatz ist dann bitte

+0

Ugh, schwer zu beantworten, ohne ein echtes Bedürfnis zu kennen. Bitte fügen Sie Ihre Zielsprache hinzu, damit Sie eine bessere Empfehlung erhalten. Kurz gesagt: 1) um konsumieren zu können, müssen Sie anfangen zu konsumieren, auf AMQP-Protokoll-Ebene ist es eine 'basic.consume'-Methode, in Client-Bibliotheken unabhängig von der Sprache sollte es in ähnlicher Weise aufgerufen werden. 2) Sie senden grundsätzlich keine Nachrichten von der Warteschlange zum Verbraucher, es ist Broker (RabbitMQ) Verantwortung. Sie senden Nachrichten an Vermittlungsstellen, binden Warteschlangen an Austauschknoten und verwenden Warteschlangen. Aber Sie können zwischen Verbraucher und Absender interagieren, wenn es Ihren Bedürfnissen entspricht. Reale Kosten sollten gemessen werden. – pinepain

Antwort

0

Im Allgemeinen legt nahe, Ihre Idee RMQ hinter einem REST-API von Putten ist ein guter. Sie möchten RMQ nicht direkt der Welt aussetzen.

Für die spezifischen Fragen:

Sobald ich eine Warteschlange für die Verbraucher schaffen, was ist der nächste Schritt, die Verbraucher erhalten Nachrichten von dieser Warteschlange zu lassen?

Haben Sie die Anleitungen gelesen? Ich würde dort beginnen, für die Sprache, die Sie arbeiten mit: http://www.rabbitmq.com/getstarted.html

Ist das nicht teuer hinsichtlich der Öffnungs- und Schließ Verbindung zwischen dem Verbraucher und meinen API?

Öffnen und schließen Sie die Verbindungen nicht für jeden Nachrichtenstapel.

Ihre Anwendungsinstanz (die "Consumer" -App) sollte eine einzige Verbindung haben. Diese Verbindung bleibt so lange geöffnet, wie Sie sie benötigen - über so viele Aufrufe von RabbitMQ wie Sie möchten.

Normalerweise öffne ich meine RMQ-Verbindung, sobald die App gestartet wird, und lasse sie geöffnet, bis die App heruntergefahren wird.

In der Consumer App werden mit dieser einzigen Verbindung mehrere Kanäle über die Verbindung erstellt. In einem Kanal wird die eigentliche Arbeit erledigt.

Je nach Sprache haben Sie einen einzelnen Kanal pro Thread; ein einzelner Kanal pro Warteschlange wird verbraucht; usw.

Sie können Kanäle im Gegensatz zu Verbindungen sehr schnell erstellen und zerstören.

Genauer gesagt wird dies bei Ihrer Idee der Stapelverarbeitung so gehandhabt, dass ein Consumer-Prefetch-Limit für Ihren Consumer festgelegt wird und anschließend die Bestätigung von Nachrichten nach deren Verarbeitung erforderlich ist.