大佬写的,看的懵懵懂懂,记录下来收藏
1、publish发布主题发布消息
package jmh.fusesource;
import java.net.URISyntaxException;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.fusesource.mqtt.client.BlockingConnection;
import org.fusesource.mqtt.client.FutureConnection;
import org.fusesource.mqtt.client.MQTT;
import org.fusesource.mqtt.client.QoS;
public class FuseSourceMQTT {
private static int qos = 2; //只有一次
private static String broker = "tcp://192.168.0.103:1883";
private static String userName = "fusepub";
private static String passWord = "fusepub";
public static BlockingConnection connect(String clientId,String userName,
String password) throws MqttException, URISyntaxException {
MQTT mqttClient = create(clientId, userName, password);
BlockingConnection bc = mqttClient.blockingConnection();
try {
bc.connect();
} catch (Exception e) {
e.printStackTrace();
}
return bc;
}
public static MQTT create(String clientId, String userName, String password)
throws URISyntaxException {
MQTT mqttClient = new MQTT();
mqttClient.setHost(broker);
mqttClient.setClientId(clientId);
mqttClient.setCleanSession(true);
mqttClient.setVersion("3.1.1");
mqttClient.setKeepAlive((short) 20);
mqttClient.setUserName(userName);
mqttClient.setPassword(password);
mqttClient.setConnectAttemptsMax(10);
return mqttClient;
}
public static FutureConnection asyncConnect(String clientId,String userName,
String password) throws MqttException, URISyntaxException {
MQTT mqttClient = create(clientId, userName, password);
FutureConnection fc = mqttClient.futureConnection();
fc.connect();
return fc;
}
private static void publish(String message_content, String clientId, String topic)
throws Exception {
connect(clientId,userName,passWord).publish(topic,message_content.getBytes("UTF-8"),
QoS.EXACTLY_ONCE,true);
}
public static void main(String[] args) throws Exception {
// publish("message content","fusesource-client-1","jmh/fusesource/blocking/retain");
asyncConnect("fusesource-async-client-1","fuse-pub","fuse-pub").publish(
"jmh/fusesource/future/retain","message content2".getBytes(),QoS.EXACTLY_ONCE,true)
;
Thread.sleep(50000);
}
}
2、subscribe订阅主题接收消息
package jmh.fusesource;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import org.fusesource.mqtt.client.Callback;
import org.fusesource.mqtt.client.Future;
import org.fusesource.mqtt.client.FutureConnection;
import org.fusesource.mqtt.client.Message;
import org.fusesource.mqtt.client.QoS;
import org.fusesource.mqtt.client.Topic;
public class FuseSourceSubMsg {
private static AtomicInteger count = new AtomicInteger();
private static AtomicLong preTimestamp = new AtomicLong();
public static void main(String[] args) throws Exception {
// publish("message content","fusesource-client-1","jmh/fusesource/blocking/retain");
FutureConnection fc = FuseSourceMQTT
.asyncConnect("fusesource-async-client-2", "fusesub", "fusesub");
fc.subscribe(new Topic[]{
new Topic("jmh/fusesource/future/retain", QoS.AT_MOST_ONCE)
}).then(new Callback<byte[]>() {
public void onSuccess(byte[] bytes) {
try {
System.out.println("sub :" + new String(bytes, "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
public void onFailure(Throwable throwable) {
}
});
Future[] futureRecv = new Future[1];
recv(fc,futureRecv);
Thread.sleep(500000);
}
private static void recv(FutureConnection fc,final Future<Message>[] messageFutures) {
messageFutures[0] = fc.receive();
messageFutures[0].then(new Callback<Message>() {
public void onSuccess(Message message) {
try {
// System.out.println("recv :" + new String(message.getPayload(), "utf-8"));
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);
}
}
} catch (Exception e) {
e.printStackTrace();
}
recv(fc, messageFutures);
}
public void onFailure(Throwable throwable) {
recv(fc, messageFutures);
}
});
}
}