1、publish发布主题发送消息
package jmh.paho;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
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.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttPersistenceException;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class PubMsg {
private static int qos = 2; //只有一次
private static String broker = "tcp://192.168.0.103:1883";
private static String userName = "alise";
private static String passWord = "alise";
public static MqttClient connect(String clientId,String userName,
String password) throws MqttException {
MemoryPersistence persistence = new MemoryPersistence();
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setUserName(userName);
connOpts.setPassword(password.toCharArray());
connOpts.setConnectionTimeout(10);
connOpts.setKeepAliveInterval(20);
connOpts.setMaxInflight(100);
MqttClient mqttClient = new MqttClient(broker, clientId, persistence);
mqttClient.setCallback(new PushCallback(clientId));
mqttClient.connect(connOpts);
return mqttClient;
}
private static void pub(MqttClient sampleClient, String msg,String topic)
throws MqttPersistenceException, MqttException {
MqttMessage message = new MqttMessage(msg.getBytes());
message.setQos(qos);
message.setRetained(false);
sampleClient.publish(topic, message);
}
private static void publish(String str,String clientId,String topic) throws MqttException{
MqttClient mqttClient = connect(clientId,userName,passWord);
if (mqttClient != null) {
pub(mqttClient, str, topic);
System.out.println("pub-->" + str);
}
if (mqttClient != null) {
mqttClient.disconnect();
}
}
public static void main(String[] args) throws MqttException, InterruptedException {
publish("message content","client-id-0","server/public/a");
Thread.sleep(50000);
}
}
class PushCallback implements MqttCallback {
private String threadId;
public PushCallback(String threadId){
this.threadId = threadId;
}
public void connectionLost(Throwable cause) {
}
public void deliveryComplete(IMqttDeliveryToken token) {
// System.out.println("deliveryComplete---------" + token.isComplete());
// try {
// System.out.println(token.getMessage().toString());
// }catch (Exception e){
// System.out.println(e);
// }
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
// String msg = new String(message.getPayload());
// System.out.println(threadId + " " + msg);
}
}
2、subscribe订阅主题接收消息
package jmh.paho;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
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.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class SubMsg {
private static int qos = 2;
private static String broker = "tcp://192.168.0.103:1883";
private static String userName = "cpx";
private static String passWord = "cpx";
private static AtomicInteger count = new AtomicInteger();
private static AtomicLong preTimestamp = new AtomicLong();
private static MqttClient connect(String clientId) throws MqttException{
MemoryPersistence persistence = new MemoryPersistence();
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setUserName(userName);
connOpts.setPassword(passWord.toCharArray());
connOpts.setConnectionTimeout(10);
connOpts.setKeepAliveInterval(20);
MqttClient mqttClient = new MqttClient(broker, clientId, persistence);
mqttClient.setCallback(new MqttCallback() {
public void connectionLost(Throwable cause) {
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
int c = count.incrementAndGet();
if(c%10000==0){
long ts = System.currentTimeMillis();
if(preTimestamp.get()==0L){
System.out.println("time:"+ts+" count:"+c);
preTimestamp.set(ts);
}
else{
long offset = ts - preTimestamp.get();
System.out.println("time:"+ts+" offset: "+offset+" count:"+c);
preTimestamp.set(ts);
}
}
}
public void deliveryComplete(IMqttDeliveryToken token) {
}
});
mqttClient.connect(connOpts);
return mqttClient;
}
public static void sub(MqttClient mqttClient,String topic) throws MqttException{
int[] qosArray = {qos};
String[] topics = {topic};
mqttClient.subscribe(topics, qosArray);
}
private static void runsub(String clientId, String topic) throws MqttException{
MqttClient mqttClient = connect(clientId);
if(mqttClient != null){
sub(mqttClient,topic);
}
}
public static void main(String[] args) throws MqttException{
runsub("client-id-1", "server/public/a");
}
}