Rabbitmq消息中的意外符号和文档末尾的垃圾

时间:2018-08-14 08:51:20

标签: json qt rabbitmq

我正在使用rabitmq-c库创建连接,并在我的Rabbitmq本地服务器和客户端之间以json格式交换消息。在客户端中接收到的json-object消息,我使用Qts json支持进行解析。但是,如果我从服务器发送消息,则客户端在消息的和处会给出奇怪的字符。因此,Qtjson无法解析它。我总是收到“文件末尾有垃圾”错误。

我发送的邮件,例如:

A = pix[:8, :8]

客户端收到的消息:

{
    "FirstName": "A",
    "LastName": "B",
    "Age": 12,
    "Address": 
     {
        "Street": "abc 10",
        "City": "def",
        "Country": "ghi"
     },
     "Phone numbers": 
     [
       "1234567",
       "2345678"
     ]
}

为什么Received message body: { "FirstName": "A", "LastName": "B", "Age": 12, "Address": { "Street": "abc 10", "City": "def", "Country": "ghi" }, "Phone numbers": [ "1234567", "2345678" ] }╬ Size:277 Message Received! 符号在那里?

我使用函数接收消息:

amqp_simple_wait_frame

我将json-object转换为cpp-object如下:

// Wait an answer to receive from different queues"
amqp_bytes_free(m_Queue);
{
  amqp_basic_consume(m_Connection, m_Channel, m_Queue, amqp_empty_bytes, m_NoLocal, m_NoAck, m_Exclusive, amqp_empty_table);

  // Reveive message 
  for (;;)
  {
    amqp_maybe_release_buffers(m_Connection);
    m_Result = amqp_simple_wait_frame(m_Connection, &m_Frame);

    m_Deliver = (amqp_basic_deliver_t *)m_Frame.payload.method.decoded;

    printf("m_Delivery: %u \nExchange: %.*s \nRoutingkey/Queue: %.*s \n",
        (unsigned)m_Deliver->delivery_tag, (int)m_Deliver->exchange.len,
        (char *)m_Deliver->exchange.bytes, (int)m_Deliver->routing_key.len,
        (char *)m_Deliver->routing_key.bytes);

    m_Result = amqp_simple_wait_frame(m_Connection, &m_Frame);


    m_Properties = (amqp_basic_properties_t *)m_Frame.payload.properties.decoded;
    if (m_Properties->_flags & AMQP_BASIC_CONTENT_TYPE_FLAG)
    {
        printf("Content-type: %.*s\n", (int)m_Properties->content_type.len, (char *)m_Properties->content_type.bytes);
    }
    std::cout << "----\n" << std::endl;

    m_BodyTarget = (size_t)m_Frame.payload.properties.body_size;
    m_BodyReceived = 0;

    while (m_BodyReceived< m_BodyTarget)
    {
        m_Result = amqp_simple_wait_frame(m_Connection, &m_Frame);

        //m_BodyReceived += m_Frame.payload.body_fragment.len;
        m_BodyReceived = m_Frame.payload.body_fragment.len;
        assert(body_received <= body_target);

        amqp_dump(m_Frame.payload.body_fragment.bytes, m_Frame.payload.body_fragment.len);
        printf("\nReceived message body:%s\nSize:%d\n", m_Frame.payload.body_fragment.bytes, m_Frame.payload.body_fragment.len);
    }


    std::cout << "Message Received! \n\n" << std::endl;

    // Convert received json object to string 
    std::string jsonResponseToString;
    jsonResponseToString = std::string((char*)m_Frame.payload.body_fragment.bytes);

    // Convert string to cpp object
    jsonToCpp(jsonResponseToString);
  }
}

在这里我得到了垃圾错误。

0 个答案:

没有答案