前写日子给朋友做了一个商超管理的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张经理