如何使用MQTT Paho在RabbitMQ队列中进行订阅
我正在尝试从我的Android应用程序连接到一个名为“消息”的队列 生产者(AMQP协议下的一个webservices)已经连接,可以通过RabbitMQ管理面板进行检查 要从我的Android设备连接,我要这样编码如何使用MQTT Paho在RabbitMQ队列中进行订阅,rabbitmq,mqtt,Rabbitmq,Mqtt,我正在尝试从我的Android应用程序连接到一个名为“消息”的队列 生产者(AMQP协议下的一个webservices)已经连接,可以通过RabbitMQ管理面板进行检查 要从我的Android设备连接,我要这样编码 private void connect() throws Exception { this.sampleClient = new MqttClient(this.broker, this.clientId); MqttConnectOptions connOp
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");
}
我试过“amq.topic”、“amq.topic.*”和“amq.topic.messages”等等。。。但当我查看RabbitMQ队列部分时,“messages”是0个使用者,并且已经自动设置了一个名为“mqtt-subscription-Sampleqos1”的新队列
发生了什么事?如何订阅“消息”队列?这个问题有两个要点 根据RabbitMQ MQTT文档: 首先,通过mqtt插件将每个队列自动绑定到amq.topicexchange 其次,每个订阅者都有自己的队列,如下所示,mqtt订阅-{cliend_id}{qosX}(其中X是订阅的qos级别)
因此,生产者必须将消息发布到“amq.topic”交换和“amq.topic..”路由密钥,接收者必须订阅“amq.topic..”路由密钥。首先,确保MQTT插件已启用:
rabbitmq插件启用rabbitmq\u MQTT
从客户端(这里是Android应用程序),您需要订阅一个主题,比如说,主题my/Android/app/messages
this.sampleClient.subscribe("my/android/app/messages");
然后,从服务器端,由于RabbitMQ的实现,您需要使用适当的路由键my.android.app.messages将消息发送到特殊的exchange“amq.topic”(注意“/”和“.”、MQTT use/和AMQP use之间的映射)。例如,如果您使用pika AMQP Python库发布,代码如下所示:
channel.basic_publish(
exchange='amq.topic',
routing_key='my.android.app.messages',
body='hello world'
)
在您的情况下,您希望从队列“messages”接收消息,基本上无法直接从MQTT客户机上的AMQP队列接收订户消息。解决方法是创建一个在服务器端运行的服务,充当AMQP订户,从“messages”队列接收消息,并使用正确的路由密钥将消息透明转发到exchange amq.topic
希望我的回答对你有帮助