RabbitMQ: Wie geben Sie den queue zu veröffentlichen?
RabbitMQ ist Channel#basicConsume
Methode gibt uns die folgenden Argumente:
channel.basicConsume(queueName, autoAck, consumerTag, noLocal,
exclusive, arguments, callback);
Geben uns die Möglichkeit zu sagen, RabbitMQ genau die Warteschlange, die wir konsumieren wollen.
Aber Channel#basicPublish
hat keine solche äquivalenz:
channel.basicPublish(exchangeName, routingKey, mandatory, immediateFlag,
basicProperties, messageAsBytes);
Warum kann ich nicht angeben, die Warteschlange zu veröffentlichen, zu hier?!? Wie bekomme ich ein Channel
publishing, sagen wir, einer Warteschlange mit dem Namen logging
? Vielen Dank im Voraus!
Was Sie wollen, zu tun, getan werden kann, mit exklusiven Warteschlange, mit den direkten Austausch und bekannten queue-name und irgendwie mit bestimmten route Taste + Thema exchange.
Danke @zaq178miami (+1) - können Sie ein code-Beispiel?
Danke @zaq178miami (+1) - können Sie ein code-Beispiel?
InformationsquelleAutor | 2013-08-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Grundsätzlich Warteschlangen werden kann, gebunden an einen exchange-basierend auf routingKeys.
Davon aus, dass du 3 verschiedene Verlage.
Publisher1 Nachricht senden, um den Austausch mit routingKey "Veranstaltungen"
Publisher2 Nachricht senden, um den Austausch mit routingKey "Aufgaben"
Publisher3 Nachricht senden, um den Austausch mit routingKey "jobs"
Können Sie einen Verbraucher, der verbraucht nur Nachrichten mit bestimmten routhingKey.
Zum Beispiel, um einen Verbraucher für "Ereignisse" - Meldungen, die Sie erklären, wie diese
Wenn Sie konsumieren wollen, alle Nachrichten kommen auf dem exchange-geben Sie die routing als '#'
Also kurzum, was ich sagen kann ist,
1. Nachrichten werden veröffentlicht, um einen Austausch.
2. Warteschlangen wird an exchange basiert auf routingKeys.
3. RabbitMQ wird, weiterleiten von Nachrichten mit passenden routing-Tasten, um die entsprechenden Warteschlangen.
Bitte sehen Sie sich die tutorial - http://www.rabbitmq.com/tutorials/tutorial-three-java.html
Die Kern-Idee in der messaging-Modell in RabbitMQ ist, dass der Hersteller nie sendet Nachrichten direkt an eine Warteschlange. Eigentlich ziemlich oft der Hersteller nicht einmal wissen, ob eine Nachricht geliefert wird jede Warteschlange an alle. Stattdessen kann der Hersteller nur senden von Nachrichten an einen exchange
InformationsquelleAutor Vishal John
Erweitern @Tien Nguyen ' s Antwort, es ist ein "cheat" im RabbitMQ, die effektiv können Sie die Publikation direkt in eine Warteschlange. Jede Warteschlange wird automatisch an das AMQP Standard-exchange, mit dem queue-Namen, als Sie die routing-Taste. Die Standard-exchange ist auch bekannt als der "namenlose exchange" - also sein name ist ein leerer string. Also, wenn Sie veröffentlichen, auf dem exchange benannt
""
mit routing-key gleich zu Ihrem queue-Namen, wird die Nachricht nur an, dass die Warteschlange. Es geht durch einen Austausch, wie @John schon sagte, es ist nur nicht eine, die Sie brauchen, um zu erklären oder binden Sie selbst.Habe ich nicht die Java-client-praktisch, zu versuchen, diesen code, aber es sollte funktionieren.
Sagte, dies ist vor allem im Gegensatz zu dem Geist, wie RabbitMQ funktioniert. Für den normalen Ablauf der Anwendung Sie sollten erklären, und binden Austausch. Aber für außergewöhnliche Fälle "cheat" kann nützlich sein. Zum Beispiel, ich glaube, das ist, wie die Kaninchen Admin-Konsole können Sie manuell veröffentlichen von Nachrichten an eine queue, ohne alle Zeremonie zu erstellen und verbindlichen Austausch.
Ja, es wird, wir haben code, der dies tut, um Warteschlangen, die an anderen Börsen.
Erstaunlich. Genau das, was ich brauchte für die automatisierte Prüfung. danke
InformationsquelleAutor Brian Reischl
bitte versuchen Sie dies:
Arbeitete er für mein Projekt.
basicPublish(java.lang.String exchange, java.lang.String routingKey, AMQP.BasicProperties props, byte[] body)
überlastung derbasicPublish
. In diesem überlastung, der 2. parameter (die Sie als "yourQueueName" heißt "routingKey". So ist "routingKey" RabbitMQ lingo für "queue-name"?routingKey bedeutet nicht, dass die Warteschlange. Eine Warteschlange gebunden werden, um einen Austausch anhand routingKey und nur erhalten nur Nachrichten, die routingKey. siehe meine Antwort.
in ein bisschen mehr detail der Meldung wird an die Standard-exchange, so dass die routing-Taste im effect-send-in der Warteschlange. Aber Nein, Sie sind nicht gleichwertig
InformationsquelleAutor Tien Nguyen