我的問題是,當我想響應到達消息時,我沒有從經紀人那里獲得遞送令牌,但消息到達了經紀人。我可以在日志中看到它。所以我的問題是如何通過發布對收到的消息進行響應?這是我的方式,它不起作用...public void setMqttCallback() { mqttClient.setCallback(new MqttCallback() { @Override public void connectionLost(final Throwable throwable) { System.out.println("Lost connection to Broker because of: " + throwable.getMessage()); } @Override public void messageArrived(final String topic, final MqttMessage mqttMessage) throws Exception { System.out.println("Received on " + topic + ": " + new String(mqttMessage.getPayload())); topics = new Topics(); //Answer to arriving messages (Logic) if (topic.equals(topics.getVehicleNavLandmarkInfo(Mqtt.VIN_ID))) { landmarks = new Landmarks(); MqttMessage message = new MqttMessage(landmarks.getLandmarks().getBytes()); message.setQos(2); System.out.println("Sending on " + topic + ": " + landmarks.getLandmarks()); mqttClient.publish(topics.getBackendNavLandsmarks(Mqtt.VIN_ID), message); } if (topic.equals(topics.getVehicleNavDestination(Mqtt.VIN_ID))) { routing = new Routing(49.0000, 8.0000, "A"); MqttMessage message = new MqttMessage(routing.getShortestPath().getBytes()); message.setQos(2); System.out.println("Sending on " + topic + ": " + routing.getShortestPath()); mqttClient.publish(topics.getBackendNavRoute(Mqtt.VIN_ID), message); } } @Override public void deliveryComplete(final IMqttDeliveryToken iMqttDeliveryToken) { System.out.println("Delivered Message: " + iMqttDeliveryToken.toString()); } }); }
1 回答

茅侃侃
TA貢獻1842條經驗 獲得超22個贊
messageArrived方法正在阻止,因此您不能再嘗試使用相同的mqttClient連接來發布消息。您需要使用另一個與代理具有自己連接的線程。
如果是一次性的情況,那么您可以啟動一個新線程并執行其中的所有操作,但是如果您的應用程序將不斷地將消息發布到到達的消息中,那么最好啟動一個線程,連接到代理然后等待信息從messageArrived方法傳遞。
添加回答
舉報
0/150
提交
取消