-
-
Save m2mIO-gister/5275324 to your computer and use it in GitHub Desktop.
import org.eclipse.paho.client.mqttv3.MqttCallback; | |
import org.eclipse.paho.client.mqttv3.MqttClient; | |
import org.eclipse.paho.client.mqttv3.MqttConnectOptions; | |
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken; | |
import org.eclipse.paho.client.mqttv3.MqttException; | |
import org.eclipse.paho.client.mqttv3.MqttMessage; | |
import org.eclipse.paho.client.mqttv3.MqttTopic; | |
public class SimpleMqttClient implements MqttCallback { | |
MqttClient myClient; | |
MqttConnectOptions connOpt; | |
static final String BROKER_URL = "tcp://q.m2m.io:1883"; | |
static final String M2MIO_DOMAIN = "<Insert m2m.io domain here>"; | |
static final String M2MIO_STUFF = "things"; | |
static final String M2MIO_THING = "<Unique device ID>"; | |
static final String M2MIO_USERNAME = "<m2m.io username>"; | |
static final String M2MIO_PASSWORD_MD5 = "<m2m.io password (MD5 sum of password)>"; | |
// the following two flags control whether this example is a publisher, a subscriber or both | |
static final Boolean subscriber = true; | |
static final Boolean publisher = true; | |
/** | |
* | |
* connectionLost | |
* This callback is invoked upon losing the MQTT connection. | |
* | |
*/ | |
@Override | |
public void connectionLost(Throwable t) { | |
System.out.println("Connection lost!"); | |
// code to reconnect to the broker would go here if desired | |
} | |
/** | |
* | |
* deliveryComplete | |
* This callback is invoked when a message published by this client | |
* is successfully received by the broker. | |
* | |
*/ | |
@Override | |
public void deliveryComplete(MqttDeliveryToken token) { | |
//System.out.println("Pub complete" + new String(token.getMessage().getPayload())); | |
} | |
/** | |
* | |
* messageArrived | |
* This callback is invoked when a message is received on a subscribed topic. | |
* | |
*/ | |
@Override | |
public void messageArrived(MqttTopic topic, MqttMessage message) throws Exception { | |
System.out.println("-------------------------------------------------"); | |
System.out.println("| Topic:" + topic.getName()); | |
System.out.println("| Message: " + new String(message.getPayload())); | |
System.out.println("-------------------------------------------------"); | |
} | |
/** | |
* | |
* MAIN | |
* | |
*/ | |
public static void main(String[] args) { | |
SimpleMqttClient smc = new SimpleMqttClient(); | |
smc.runClient(); | |
} | |
/** | |
* | |
* runClient | |
* The main functionality of this simple example. | |
* Create a MQTT client, connect to broker, pub/sub, disconnect. | |
* | |
*/ | |
public void runClient() { | |
// setup MQTT Client | |
String clientID = M2MIO_THING; | |
connOpt = new MqttConnectOptions(); | |
connOpt.setCleanSession(true); | |
connOpt.setKeepAliveInterval(30); | |
connOpt.setUserName(M2MIO_USERNAME); | |
connOpt.setPassword(M2MIO_PASSWORD_MD5.toCharArray()); | |
// Connect to Broker | |
try { | |
myClient = new MqttClient(BROKER_URL, clientID); | |
myClient.setCallback(this); | |
myClient.connect(connOpt); | |
} catch (MqttException e) { | |
e.printStackTrace(); | |
System.exit(-1); | |
} | |
System.out.println("Connected to " + BROKER_URL); | |
// setup topic | |
// topics on m2m.io are in the form <domain>/<stuff>/<thing> | |
String myTopic = M2MIO_DOMAIN + "/" + M2MIO_STUFF + "/" + M2MIO_THING; | |
MqttTopic topic = myClient.getTopic(myTopic); | |
// subscribe to topic if subscriber | |
if (subscriber) { | |
try { | |
int subQoS = 0; | |
myClient.subscribe(myTopic, subQoS); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
// publish messages if publisher | |
if (publisher) { | |
for (int i=1; i<=10; i++) { | |
String pubMsg = "{\"pubmsg\":" + i + "}"; | |
int pubQoS = 0; | |
MqttMessage message = new MqttMessage(pubMsg.getBytes()); | |
message.setQos(pubQoS); | |
message.setRetained(false); | |
// Publish the message | |
System.out.println("Publishing to topic \"" + topic + "\" qos " + pubQoS); | |
MqttDeliveryToken token = null; | |
try { | |
// publish message to broker | |
token = topic.publish(message); | |
// Wait until the message has been delivered to the broker | |
token.waitForCompletion(); | |
Thread.sleep(100); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
// disconnect | |
try { | |
// wait to ensure subscribed messages are delivered | |
if (subscriber) { | |
Thread.sleep(5000); | |
} | |
myClient.disconnect(); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} |
directly created mqttClient. java but in that condition is if(publisher) and if(subscriber) this condition where it will check without providing classes
@m2mIO-gister; Hi gister need your help on this exapmle. I am not getting output from this class MqttApp.java and when I run publisher.class output displayed and when I run Subscriber no output. Please can you check below code and update me if possible.
public class MqttApp {
public static void main(String[] args) throws MqttException {
if(args.length < 1) {
throw new IllegalArgumentException("Must have either 'publisher' or 'subscriber' as argument");
}
switch (args[0]) {
case "publisher":
Publisher.main(args);
case "subscriber":
Subscriber.main(args);
break;
default:
throw new IllegalArgumentException("What to pass args" + args[0]);
}
}
}
and
public class SimpleMqttCallBack implements MqttCallback{
@Override
public void connectionLost(Throwable cause) {
System.out.println("Connection to MQTT broker Lost!");
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println("Message Received:\t"+ new String(message.getPayload()));
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
}
}
and
public class Publisher {
public static void main(String[] args) throws MqttException{
// TODO Auto-generated method stub
String messageString = "Hello World from Java";
if(args.length == 2) {
messageString = args[1];
}
System.out.println("== START PUBLISHER ==");
MqttClient client = new MqttClient("tcp://localhost:1883", MqttClient.generateClientId());
client.connect();
//System.out.println(MqttClient.generateClientId());
MqttMessage msg = new MqttMessage();
msg.setPayload(messageString.getBytes());
client.publish("iot_data", msg);
System.out.println("\tMessage '"+ messageString +"' to 'iot_data'");
}
}
and
package com.mqtt.mqttCall;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
public class Subscriber {
public static void main(String[] args) throws MqttException {
System.out.println("== START SUBSCRIBE ==");
MqttClient client = new MqttClient("tcp://localhost:1883", MqttClient.generateClientId());
//System.out.println(MqttClient.generateClientId());
client.setCallback(new SimpleMqttCallBack());
client.connect();
client.subscribe("iot_data");
}
}
Please help me with that code what is error in that?
Please reply for the example I am started learning MQTT from yesterday onwards I didn't understand anything. Please help me
Hi, how to create publish and subscriber class and can any one help with that