前寫日子給朋友做了一個商超管理的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()));
}


MQTT協議物聯網android端app開發聯系我們,400-60-800-61,13916016158張經理