Как публиковать и подписываться, используя один и тот же объект 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(); но подписчик отправляет данные правильно.

почему я получаю нулевое значение вместо отправки данных подписчиком? Кажется, код подписки не получает данные.

где я делаю ошибку?

0 ответов

Другие вопросы по тегам