0
我是mqtt新手。入門我嘗試向蚊子經紀人發佈和訂閱主題。我能夠發佈消息。但是我的用戶並沒有聽到這個話題,它會在沒有等待/查詢消息的情況下開始和停止。無法訂閱paho mqtt java
下面是用戶代碼,
public class MqttSubscriber implements MqttCallback {
private static final String TOPIC = "iot/endpoint";
public static void main(String[] args) {
new MqttSubscriber().listen();
}
public void listen() {
MqttClient client = null;
try {
client = MqttClientGenerator.generateSubscriberClient();
client.connect();
System.out.println("Fetching messages...");
client.subscribe(TOPIC);
client.setCallback(this);
client.disconnect();
} catch (MqttException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public void connectionLost(Throwable t) {
t.printStackTrace();
}
public void deliveryComplete(IMqttDeliveryToken arg0) {
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println("Message received from broker...");
System.out.println("Received Message: -- ");
System.out.println(message.getPayload().toString());
}
}
MqttClientGenerator:
public class MqttClientGenerator {
private static final String BROKER_URI = "tcp://localhost:1883";
private static final String CLIENT_ID = "pub";
private static final String SUBSCRIBER_ID = "sub";
private MqttClientGenerator() {}
public static MqttClient generatePublisherClient() throws MqttException{
//adding timestamp to make client name unique every time
return new MqttClient(BROKER_URI, CLIENT_ID+new Date().getTime());
}
public static MqttClient generateSubscriberClient() throws MqttException{
//adding timestamp to make client name unique every time
return new MqttClient(BROKER_URI, SUBSCRIBER_ID+new Date().getTime());
}
}
缺少什麼我在這裏?
你的代碼似乎是正確的,但有一件事似乎很奇怪,你實際上調用客戶端上的斷開連接方法,嘗試刪除這一行 –
工程就像一個魅力:-)。斷開用戶內部的客戶端是愚蠢的,必須作爲終結者的一部分移出該塊。 –
很高興能幫到;)我已經把它作爲一個答案使它更清晰 –