AMQP-CPP RabbitMQ收到额外的符号message.body()比message.size()大1

时间:2018-07-04 09:11:32

标签: c++ rabbitmq amqp

当我收到一条消息时,我使用message.body()获得消息内容,但始终在末尾添加一个额外的字符。 message.body()的内容始终比message.size()大一。多余的字符是“α”,并且具有ASCII码Decimal 206,我不明白为什么要包含此字符。我总是必须切断此标志周围的信息,而不必如此。

我的回叫邮件:

void Communicator_RabbitMQ::MessageCB(const AMQP::Message &message, uint64_t deliveryTag, bool redelivered)
{
    cout << "Message received: (" << message.body() << ") , " <<  "Body Size: " << message.bodySize() << endl;

}

示例:

通过RabbitMQ管理UI发布了以下负载:“ 12345”

回调的输出:

Message received: (12345�) , Body Size: 5

调试器:

*(message.body() + 5)   0xce 'Î'    const char

当我使用RabbitMQ管理UI消耗消息时,会收到以下有效负载:

有效载荷 5个字节 12345 编码:字符串

1 个答案:

答案 0 :(得分:1)

请考虑

message.body()

返回一个指向一个非空终止字符串的指针。您应该使用message.bodySize()来检查实际长度。

示例1 :(复制内容)

void Communicator_RabbitMQ::MessageCB(const AMQP::Message &message, uint64_t deliveryTag, bool redelivered)
{
    cout << "Message received: (" << std::string(message.body(), message.body() + message.bodySize()) << ") , " << "Body Size: " << message.bodySize() << endl;
}

示例2 :(使用c ++ 17的string_view)

void Communicator_RabbitMQ::MessageCB(const AMQP::Message &message, uint64_t deliveryTag, bool redelivered)
{
    cout << "Message received: (" << std::string_view(message.body(), message.bodySize()) << ") , " << "Body Size: " << message.bodySize() << endl;
}