问题陈述: - 我正在尝试自动化MQTT流,因为我需要按顺序发布和订阅多个主题。技巧部分是从第一个发布中收到的消息有一些值,它将在下一个sub / pub命令中传递。
例如。
我能够收到关于第一个主题的消息,但我没有得到如何在main方法中访问接收消息的有效负载,并将其传递并附加到下一个sub的下一个主题。
有没有办法从messageArrived回调方法中获取消息有效负载到创建客户端实例的main方法?
注意: - 我使用单个客户端进行发布和订阅。
请帮助我,因为我已经没有选择和方法了。
编辑: -
代码段
主要课程
n = (1:2017)'; % column vector
m = 1:6; % row vector
syms x;
l = log(n*x); % column vector of logs
c = cos(m*x); % row vector of cos
product = l*c; % matrix product
i = int(product, x, 10, 20); % integral from 10 to 20
iDouble = double(i); % convert the result to double
Mqtt Claback impl: -
public class MqttOverSSL {
String deviceId;
MqttClient client = null;
public MqttOverSSL() {
}
public MqttOverSSL(String deviceId) throws MqttException, InterruptedException {
this.deviceId = deviceId;
MqttConnection mqttConObj = new MqttConnection();
this.client = mqttConObj.mqttConnection();
}
public void getLinkCodeMethod() throws MqttException, InterruptedException {
client.subscribe("abc/multi/" + deviceId + "/linkcode", 0);
publish(client, "abc/multi/" + deviceId + "/getlinkcode", 0, "".getBytes());
}
}
发布商类: -
public class SimpleMqttCallBack implements MqttCallback {
String arrivedMessage;
@Override
public void connectionLost(Throwable throwable) {
System.out.println("Connection to MQTT broker lost!");
}
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
arrivedMessage = mqttMessage.toString();
System.out.println("Message received:\t" + arrivedMessage);
linkCode(arrivedMessage);
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
System.out.println("Delivery complete callback: Publish Completed "+ Arrays.toString(iMqttDeliveryToken.getTopics()));
}
public void linkCode(String arrivedMessage) throws MqttException {
System.out.println("String is "+ arrivedMessage);
Gson g = new Gson();
GetCode code = g.fromJson(arrivedMessage, GetCode.class);
System.out.println(code.getLinkCode());
}
}
答案 0 :(得分:0)
好的,你现在要做的事情要清楚一点。
简短回答不,您无法将值传递回"主要方法"。 MQTT是异步的,这意味着您不知道何时消息将到达您订阅的主题。
您需要更新代码以检查传入消息主题是什么,然后在messageArrived()
处理程序中处理您想要对该响应执行的操作。如果您有一系列任务要做,那么您可能需要实现所谓的状态机,以便跟踪您在序列中的位置。