1

我有一个生产者nodejs,我使用的 javascript 库是amqp.node,消费者是由C 库实现的。

从 rabbitmq 管理网站,我可以看到消息被推入队列并传递给消费者。但是,在消费者中,amqp_consume_messagereturn为 null。在这种情况下如何调试它?AMQP-RESPONSE-NORMALenvelop.message.body

这是我使用来自rabbitmq的消息的代码

amqp_rpc_reply_t reply;
amqp_envelope_t envelope;
amqp_maybe_release_buffers(m_con); 
timeval m_time;
m_time.tv_sec = dwMilliseconds/1000;
m_time.tv_usec = (dwMilliseconds%1000)*1000;
reply = amqp_consume_message(m_con, &envelope, &m_time, 0);//time out 1 second
if (AMQP_RESPONSE_NORMAL != reply.reply_type)
{
    return false;
}

bool bRet = false;
amqp_bytes_t& rTheBody = envelope.message.body;
if (rTheBody.len > 0)
{

更新

经过进一步调查,我发现这些消息存储在envelop.message.pool.pages. 我想要和之间的message.body不同message.pool

4

1 回答 1

0

引用这个

对象的池字段amqp_message_t(例如 envelope.message.pool)是用于分配部分消息的内存池。它是一个实现细节,不应由客户端代码直接使用(此实现细节可能会发生变化)。

envelope.message.body.bytes应该为 NULL 并返回值的唯一原因AMQP_RESPONSE_NORMAL是如果收到 0 长度的消息正文。

于 2015-03-24T01:56:41.737 回答