Java MQTT客户端在将消息发布到代理后未收到确认

Java MQTT客户端在将消息发布到代理后未收到确认,java,callback,mqtt,publish,Java,Callback,Mqtt,Publish,我的问题是,当我想要响应一个arriving消息时,我没有从代理那里得到传递令牌,但是消息到达了代理。我可以在日志中看到它。所以我的问题是如何对传入的消息进行发布响应 我就是这样做的,但它不起作用 public void setMqttCallback(){ setCallback(新的MqttCallback(){ @凌驾 公共无效连接丢失(最终可丢弃){ System.out.println(“由于:“+throwable.getMessage()”)而与代理失去连接); } @凌驾 pu

我的问题是,当我想要响应一个arriving消息时,我没有从代理那里得到传递令牌,但是消息到达了代理。我可以在日志中看到它。所以我的问题是如何对传入的消息进行发布响应

我就是这样做的,但它不起作用

public void setMqttCallback(){
setCallback(新的MqttCallback(){
@凌驾
公共无效连接丢失(最终可丢弃){
System.out.println(“由于:“+throwable.getMessage()”)而与代理失去连接);
}
@凌驾
public void messageArrived(最终字符串主题,最终MqttMessage MqttMessage)引发异常{
System.out.println(“在“+topic+”:“+新字符串(mqttMessage.getPayload())上收到”;
主题=新主题();
//对到达消息的应答(逻辑)
if(topic.equals(topics.getVehicleNavLandmarkInfo(Mqtt.VIN_ID))){
地标=新地标();
MqttMessage=newMQTTMessage(landmarks.getLandmarks().getBytes());
message.setQos(2);
System.out.println(“在“+topic+”:“+landmarks.getLandmarks()上发送”);
发布(topics.getBackendNavLandsmarks(Mqtt.VIN_ID),消息);
}
if(topic.equals(topics.getVehicleNavDestination(Mqtt.VIN_ID))){
路由=新路由(49.0000,8.0000,“A”);
MqttMessage message=新MqttMessage(routing.getShortestPath().getBytes());
message.setQos(2);
System.out.println(“在“+topic+”上发送:“+routing.getShortestPath());
发布(topics.getBackendNavRoute(Mqtt.VIN_ID),消息);
}
}
@凌驾
公共无效交付完成(最终IMqttDeliveryToken IMqttDeliveryToken){
System.out.println(“传递的消息:+iMqttDeliveryToken.toString());
}
});

}
messageArrived方法被阻塞,因此您无法尝试使用相同的mqttClient连接发布消息。您需要使用另一个与代理有自己连接的线程


如果是一次性情况,那么您可以启动一个新线程并执行其中的所有操作,但如果您的应用程序将不断向到达的消息发布消息,那么最好启动一个线程,连接到代理,然后等待MessageArrized方法传递信息。

MessageArrized方法正在阻塞,因此,您不能尝试使用相同的mqttClient连接发布消息。您需要使用另一个与代理有自己连接的线程


如果是一次性的情况,那么您可以启动一个新线程并执行其中的所有操作,但如果您的应用程序将不断向到达的消息发布消息,那么最好启动一个线程,连接到代理,然后等待messageArrived方法传递的信息。

这里有一个解决此问题的方法,但我不明白。我是否必须创建另一个客户端并将其连接到代理,然后使用它发布?不对劲。。。这是解决这个问题的办法,但我不太明白。我是否必须创建另一个客户端并将其连接到代理,然后使用它发布?不对劲。。。你有这方面的代码片段吗?我认为这是一个正常的情况,但它没有被描述…谢谢!我使用了Paho框架的AsynchClient。现在很好用!你有这方面的代码片段吗?我认为这是一个正常的情况,但它没有被描述…谢谢!我使用了Paho框架的AsynchClient。现在很好用!