ROS1集成NanoSDK(mqtt over quic)库&&遇到的问题

集成方式,demo见附件

        

可参考【探索 MQTT 5.0 新特性:基于 MQTTX CLI 的使用示例 | EMQ

问题记录

        1. ROS集成构建问题:如下图,少了依赖库导致未定义的符号

           

       2. 订阅失败:原因

    virtual bool Connect() {
        m_quic_client.set_callbacks(this);

        Property cp;
        cp.append_u32(MAXIMUM_PACKET_SIZE, 120)
            .append_u32(SESSION_EXPIRY_INTERVAL, 120)
            .append_u16(RECEIVE_MAXIMUM, 120)
            .append_u32(MAXIMUM_PACKET_SIZE, 120);
            // .append_u16(TOPIC_ALIAS_MAXIMUM, 120);

        m_cmsg.client_id(m_topic)
            .user_name("emqx")
            .password("emqx1234")
            .clean_session(false)
            .keep_alive(60)
            .proto_version(5)
            .will_topic("abc")
            .will_msg((uint8_t*)"abc", 3)
            .property(cp);

        try {
            ROS_INFO("CAICloudMqttOverQuic::Connecting to MQTT server: %s: %s", m_server_address.c_str(), m_port.c_str());
            m_quic_client.connect(m_cmsg);
            ROS_INFO("CAICloudMqttOverQuic::Connected to MQTT server success!");
            
            // 这几行代码导致订阅失败
            Property pp;
            std::string payload = GetMacAddr("eth0") + " online!";
            pp.append_strpair(USER_PROPERTY, "key", "val");
            pp.append_u16(TOPIC_ALIAS, 10);

            m_pmsg.dup(false)
                .payload((uint8_t *)payload.c_str(), payload.length())
                .property(pp)
                .qos(2);
            m_quic_client.publish(m_pmsg);
	        ROS_INFO("CAICloudMqttOverQuic::pub to topic success!");
        }
        catch (const mqtt::exception& ex) {
            ROS_ERROR("CAICloudMqttOverQuic::Failed to connect to MQTT server: %s", ex.what());
            Close();
            return false;
        }

        SubMessage::topics topics = {
            {m_topic, 2}
        };

        m_smsg.topic_with_qos(topics);
        m_quic_client.subscribe(m_smsg);
	    ROS_INFO("CAICloudMqttOverQuic::subscribe topic [%s] success!", m_topic.c_str());

        return true;
    }

        3. 这个接口处理注意,非栈内存 无需额外内存拷贝

        4. 工程上使用,下行(服务到客户端消息被丢掉)

 原因是客户端设置了收发报文大小:

        5. Warning! msg lost due to busy socket---待更新

        6. 客户端默认接收报文大小是多少?---待更新

        7. connect链接阻塞一直不返回---目标ip是外网ip,域控连不了外网

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值