MQTT协议 物联网 android端开发

     前写日子给朋友做了一个商超管理的app开发项目,后台说项目里用到一个技术,"消息中间件",后来网上查了一下,大体了解了一下,朋友后台是用activeMQ,我也了解一下这个产品,大体了解了其中原理,具体原理不详细讲解,自行百度。

    android端如果要使用消息中间件,原理就是发布和订阅,使用mqtt协议,以AS为例子

   第一步:需要引用库

 
 
compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

 第二步:发布

 
 
/**
*
* @param tcp 地址
* @param topic1 主题
* @param message1 发送的消息
* @return
* @throws MqttException
*/
 
 
private static final String HOST = "tcp://******";
private String TOPIC;
private String MESSAGE ;
private static final String clientid = "server" ;
private MqttClient client;
private MqttTopic topic ;
private String userName = "***";
private String passWord = "****" ;

public String doPublish(String tcp, String topic1, String message1) throws MqttException { 

  //获取前台传过来的两个参数 

  TOPIC = topic1; 

  MESSAGE = message1; 

  //new mqttClient //MemoryPersistence设置clientid的保存形式,默认为以内存保存 

client = new MqttClient(tcp, clientid, new MemoryPersistence()); 

  //与activeMQ连接的方法 

connect(); 

  //new mqttMessage 

message = new MqttMessage(); /

/设置服务质量 只发送1次 

message.setQos(2); 

  //设置是否在服务器中保存消息体 

message.setRetained(true); 

  //设置消息的内容 

message.setPayload(MESSAGE.getBytes()); 

  //发布 

publish(topic, message); 

return "result";

}

 
 
 
 
/**
* 连接
*/

private void connect() { 

  // new mqttConnection 用来设置一些连接的属性

MqttConnectOptions options = new MqttConnectOptions();

  // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接 // 换而言之,设置为false时可以客户端可以接受离线消息

options.setCleanSession(false);

  // 设置连接的用户名和密码 

options.setUserName(userName); 

 options.setPassword(passWord.toCharArray()); 

  // 设置超时时间 

options.setConnectionTimeout(10);

  // 设置会话心跳时间 

options.setKeepAliveInterval(20); 

  try

  // 设置回调类 

client.setCallback(new PushCallback());

  // 连接 

client.connect(options); 

  // 获取activeMQ上名为TOPIC的topic

topic = client.getTopic(TOPIC); 

 } catch (Exception e) { 

 e.printStackTrace();

 }}

 
 
public static void publish(MqttTopic topic, MqttMessage message) throws MqttPersistenceException, MqttException {
// 发布的方法
// new mqttDeliveryToken
MqttDeliveryToken token = topic.publish(message);
// 发布
token.waitForCompletion();
Log. e( "info", "message is published completely! "
+ token.isComplete());
}

第三步:订阅

public void connectionLost(Throwable cause) {

 
  
 
// 连接丢失后,一般在这里面进行重连
 
 
**********
System. out.println( "连接断开,可以做重连");
}
public void deliveryComplete(IMqttDeliveryToken token) {
Log. e( "info", "deliveryComplete---------" + token.isComplete());
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
// subscribe后得到的消息会执行到这里面
 
 
********
System. out.println( "接收消息主题 : " + topic);
System. out.println( "接收消息Qos : " + message.getQos());
System. out.println( "接收消息内容 : " + new String(message.getPayload()));
}

猜你喜欢

转载自blog.csdn.net/mrpanda87/article/details/80493542