阿里云微消息队列MQTT对接

==》点击此处返回主目录《==

一、打开链接: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);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值