MQTT-Client-eclipse paho源码(pub/sub)

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");

  }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值