Wie abonnieren Sie in einem RabbitMQ Warteschlange mit MQTT Paho
Ich versuche eine Verbindung von meinem Android-app auf eine queue namens "Nachrichten".
Den Hersteller (eines webservices unter AMQP-Protokoll) ist schon angeschlossen, kann es sein, überprüfen Sie über RabbitMQ admin-panel.
Verbindung von meinem Android-Gerät bin ich die Codierung wie diese.
private void connect() throws Exception {
this.sampleClient = new MqttClient(this.broker, this.clientId);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setUserName("user");
connOpts.setPassword("user".toCharArray());
/*connOpts.setConnectionTimeout(60 * 10);
connOpts.setKeepAliveInterval(60 * 5);*/
connOpts.setCleanSession(true);
this.sampleClient.connect(connOpts);
this.sampleClient.setCallback(this);
this.sampleClient.subscribe("messages");
if(!this.sampleClient.isConnected()){
System.out.println("Not Connected");
return;
}
System.out.println("Connected");
}
Habe ich versucht mit "amq.Thema", "amq.Thema.*", "amq.Thema.Nachrichten", etc... Aber wenn ich mir in der RabbitMQ Warteschlange Abschnitt "Nachrichten" ist mit 0 Verbraucher, und eine neue Warteschlange namens "mqtt-Abonnement-Sampleqos1" automatisch.
Was ist passiert? Wie kann ich susbscribe "Nachrichten" queue?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei wichtige Punkte zu dieser Frage.
Entsprechend mit dem RabbitMQ-MQTT-Dokumentation: http://www.rabbitmq.com/mqtt.html
Erstens, alle Warteschlangen werden automatisch gebunden, um amq.Thema exchange durch die mqtt-plugin.
Zweitens, jeder Teilnehmer hat seine eigene queue, die so Aussehen, mqtt-Abonnement-{cliend_id}{qosX} (wobei X für die qos-level des Abonnements)
Daher, der Produzent muss zur Veröffentlichung der Nachricht zu "amq.Thema" exchange " und "amq.Thema.." routing-Schlüssel, und der Empfänger muss zu abonnieren "amq.Thema.." routing-Taste.
Erstens, stellen Sie sicher, dass MQTT-plugin aktiviert ist:
rabbitmq-plugins enable rabbitmq_mqtt
Aus der client-Seite (hier ist Sie Android app), müssen Sie Abonnent zu einem Thema, sagen wir, mein Thema/android/app/Nachrichten
Dann, von der server-Seite, da von RabbitMQ ist die Umsetzung, die Sie benötigen, senden Sie die Nachricht an eine spezielle exchange 'amq.Thema " mit entsprechenden route Taste mein.android.app.Nachrichten (beachten Sie die Zuordnung zwischen '/' und '.', MQTT verwenden Sie /und AMQP benutzen .). Zum Beispiel, wenn Sie veröffentlichen, indem pika AMQP Python-lib, wird der code sieht wie folgt aus:
In Ihrem Fall, Sie wollen zu bekommen eine Nachricht aus der Warteschlange "Nachrichten", im Grunde gibt es keine Möglichkeit, direkt Abonnenten Meldung aus, dass AMQP Warteschlange auf dem MQTT-client. Die Arbeit ist ein Dienst, der auf Ihrem server-Seite, die Arbeit als AMQP-Abonnent sind, erhalten Sie Nachricht von "Nachrichten" queue " und " transparentes weiterleiten der Meldung an exchange amq.Thema mit der richtigen routing-Taste.
Hoffe, dass meine Antwort hilfreich.