我的問(wèn)題是,當(dāng)我想響應(yīng)到達(dá)消息時(shí),我沒(méi)有從經(jīng)紀(jì)人那里獲得遞送令牌,但消息到達(dá)了經(jīng)紀(jì)人。我可以在日志中看到它。所以我的問(wèn)題是如何通過(guò)發(fā)布對(duì)收到的消息進(jìn)行響應(yīng)?這是我的方式,它不起作用...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貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
messageArrived方法正在阻止,因此您不能再嘗試使用相同的mqttClient連接來(lái)發(fā)布消息。您需要使用另一個(gè)與代理具有自己連接的線程。
如果是一次性的情況,那么您可以啟動(dòng)一個(gè)新線程并執(zhí)行其中的所有操作,但是如果您的應(yīng)用程序?qū)⒉粩嗟貙⑾l(fā)布到到達(dá)的消息中,那么最好啟動(dòng)一個(gè)線程,連接到代理然后等待信息從messageArrived方法傳遞。
添加回答
舉報(bào)
0/150
提交
取消