1

私は 1 つのプロデューサーに基づいてnodejsおり、使用した javascript ライブラリはamqp.nodeであり、コンシューマーはC ライブラリによって実装されています。

rabbitmq 管理 Web から、メッセージがキューにプッシュされ、コンシューマーに配信されることがわかります。ただし、コンシューマーでは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 に答える