• 阿里云微消息队列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);

    }

  • 相关阅读:
    华为云云耀云服务器L实例评测|华为云上安装etcd
    Springboot毕设项目动物保护协会系统fn275(java+VUE+Mybatis+Maven+Mysql)
    JavaDS —— 单链表 与 LinkedList
    CRC8算法的解读,以及在E2E通信保护的应用
    item_get-商品详情
    rhel8配置bond(nmcli)
    【Python学习笔记】字符编码
    Breach 1.0 靶机
    UE4 春节鞭炮
    洛谷千题详解 | P1012 [NOIP1998 提高组] 拼数【C++、Java语言】
  • 原文地址:https://blog.csdn.net/Epll_apple/article/details/126077855