我正在使用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);
}
}
在这里我得到了垃圾错误。