我正在尝试从我的Android应用程序连接到一个名为"messages"的队列.
生产者(AMQP协议下的一个web服务)已经连接,可以通过RabbitMQ管理面板进行检查.
要从我的Android设备连接,我编码就像这样.
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文档:http://www.rabbitmq.com/mqtt.html
首先,每个队列都被mqtt-plugin 自动绑定到amq.topic交换.
其次,每个订阅者都有自己的队列,如下所示,mqtt-subscription- {cliend_id} {qosX}(其中X是订阅的qos级别)
因此,生产者必须将消息发布到"amq.topic"交换,并且"amq.topic .."路由密钥,并且接收者必须订阅"amq.topic .."routing-key.