赞
踩
一、打开链接:https://www.aliyun.com/product/mq4iot,根据提示开通微消息队列 MQTT,点击“管理控制台”会进入如下界面,有关阿里云计费说明请参考:https://help.aliyun.com/document_detail/52819.html?spm=a2c4g.11186623.6.554.28987cb
二、在管理控制台创建并记录以下信息,其中devicename是自己定义的,不需要在阿里云后台获取。
{
"DeviceName": "B002TTSTESTDEVICE001",
"type": "4",
"instanceID": "mqtt-cn-n6w1ulyua01",
"AccessKeyID": "LTAI4GKyPad1FMQR1oWCjN8t",
"AccessKeySecret": "ucjNqveEbZxaMghdjybRgu6RQ29Or4",
"GroupID": "GID_BOX",
"topic": "data"
}
三、服务器给音箱推送消息,请参考阿里云官方文档,文档中包含各种常用编程语言的示例代码。https://help.aliyun.com/document_detail/96176.html?spm=a2c4g.11186623.2.13.229f42caHWXK5f#concept-96176-zh
JAVA 示例代码如下:
public void SendP2PMessage(String deviceId, String msg, String encrypt) throws Exception {
//String masterClientId = "GID_PVP@@@bm_master";
String masterClientId = "bm_master@@@" + System.currentTimeMillis();
/* MQ4IOT 消息的一级 topic,需要在控制台申请才能使用。 如果使用了没有申请或者没有被授权的 topic 会导致鉴权失败,服务端会断开客户端连接。 */
final String parentTopic = "TID_VP";// TID_VP 是写入音箱中的 topic
/* QoS参数代表传输质量,可选0,1,2,根据实际需求合理设置,具体参考 https://help.aliyun.com/document_detail/42420.html?spm=a2c4g.11186623.6.544.1ea529cfAO5zV3 */
final int qosLevel = 0;
ConnectionOptionWrapper connectionOptionWrapper = new ConnectionOptionWrapper(instanceId, accessKey, secretKey, masterClientId);
final MemoryPersistence memoryPersistence = new MemoryPersistence();
/** 客户端使用的协议和端口必须匹配,具体参考文档 https://help.aliyun.com/document_detail/44866.html?spm=a2c4g.11186623.6.552.25302386RcuYFB 如果是 SSL 加密则设置ssl://endpoint:8883 */
MqttClient mqttClient = new MqttClient("tcp://" + endPoint + ":1883", masterClientId, memoryPersistence);
/* 客户端设置好发送超时时间,防止无限阻塞 */
mqttClient.setTimeToWait(5000);
mqttClient.setCallback(new MqttCallbackExtended() {
public void connectComplete(boolean reconnect, String serverURI) {
/* 客户端连接成功后就需要尽快订阅需要的 topic */
System.out.println("connect success");
}
public void connectionLost(Throwable throwable) {
throwable.printStackTrace();
}
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
/* 消费消息的回调接口,需要确保该接口不抛异常,该接口运行返回即代表消息消费成功。 消费消息需要保证在规定时间内完成,如果消费耗时超过服务端约定的超时时间,对于可靠传输的模式,服务端可能会重试推送,业务需要做好幂等去重处理。超时时间约定参考限制 https://help.aliyun.com/document_detail/63620.html?spm=a2c4g.11186623.6.546.229f1f6ago55Fj */
System.out.println("receive msg from topic " + s + " , body is " + new String(mqttMessage.getPayload()));
}
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
System.out.println("send msg succeed topic is : " + iMqttDeliveryToken.getTopics()[0]);
}
});
mqttClient.connect(connectionOptionWrapper.getMqttConnectOptions());
/* MQ4IoT支持点对点消息,即如果发送方明确知道该消息只需要给特定的一个设备接收,且知道对端的 clientId,则可以直接发送点对点消息。
点对点消息不需要经过订阅关系匹配,可以简化订阅方的逻辑。点对点消息的 topic 格式规范是 {{parentTopic}}/p2p/{{targetClientId}} */
String clientId = "GID_PVP@@@" + deviceId;//deviceId 是写入音箱中的DeviceName
final String p2pSendTopic = parentTopic + "/p2p/" + clientId;
System.out.println(msg);
MqttMessage message = new MqttMessage(msg.getBytes());
if (!"".equals(encrypt)) {
message = new MqttMessage(msg.getBytes(encrypt));
}
message.setQos(qosLevel);
mqttClient.publish(p2pSendTopic, message);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。