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

AMQP-CPP RabbitMQ receiving extra sign, message.body() by one greater than message.size()

本文关键字:message body size 符号 RabbitMQ AMQP-CPP      更新时间:2023-10-16

当我收到一条消息时,我使用 message.body(( 获取消息内容,但末尾总是有一个额外的字符。message.body(( 的内容总是比 message.size(( 大 1。额外的字符是"Î",并且具有 ASCII 代码十进制 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编码:字符串

请考虑

message.body()

返回指向以 NOT null 结尾的字符串的指针。你应该使用 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;
}