Как публиковать и подписываться, используя один и тот же объект BlockingConnection
Я пытаюсь опубликовать и подписать данные на MQTT, используя ниже мой код,
try{
ObjectMapper mapper = new ObjectMapper();
MqttMessage message2 = new MqttMessage();
MQTT mqtt_connect = new MQTT();
mqtt_connect.setHost(Host_Address, Integer.parseInt(port));
String topic = "/call/publishcall";
mqtt_connect.setClientId("publishcall");
mqtt_connect.setWillRetain(false);
mqtt_connect.isWillRetain();
mqtt_connect.setWillTopic(topic);
BlockingConnection m_publisher = mqtt_connect.blockingConnection();
m_publisher.connect();
if(m_publisher.isConnected()){
System.out.println("connected");
message2.setPayload();
Object o2 = message2;
String s2 = o2.toString();
mqtt_connect.setWillMessage(o2.toString());
m_publisher.publish(topic, s2.getBytes(), QoS.AT_MOST_ONCE, false);
Topic [] topics = {new Topic("/call/subscribecall", QoS.AT_MOST_ONCE)};
m_publisher.subscribe(topics);
Message message = m_publisher.receive(20000, TimeUnit.MILLISECONDS);
byte[] payload = message.getPayload();
String messageContent = new String(payload);
System.out.println("Received message from topic: " + message.getTopic() + " Message content: " + messageContent);
message.ack();
if(messageContent =="0"){
//i want to do something based on result 0
}
else if(messageContent =="1"){
//i want to do something based on result 1
}
else
{
//i want to do something based on result except 0 or 1
}
m_publisher.disconnect();
}
else
{
System.out.println("not connected");
}
} catch (Exception e) {
e.printStackTrace();
return "failure";
}
но я могу опубликовать данные в MQTT. когда они публикуют данные с именем темы как /call/subscribecall, я получаю исключение нулевого указателя в этом message.getPayload();
но подписчик отправляет данные правильно.
почему я получаю нулевое значение вместо отправки данных подписчиком? Кажется, код подписки не получает данные.
где я делаю ошибку?