AMQP-CPP RabbitMQ 接收额外符号,message.body() 比 message.size() 大一
AMQP-CPP RabbitMQ receiving extra sign, message.body() by one greater than message.size()
当我收到一条消息时,我通过 message.body() 获取消息内容,但总是在末尾有一个额外的字符。 message.body() 的内容总是比 message.size() 大一。多出的字符是'ε',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()
returns 指向非空终止字符串的指针。您应该使用 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;
}
当我收到一条消息时,我通过 message.body() 获取消息内容,但总是在末尾有一个额外的字符。 message.body() 的内容总是比 message.size() 大一。多出的字符是'ε',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()
returns 指向非空终止字符串的指针。您应该使用 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;
}