これは古い投稿であることは承知していますが、最近このトピックに関する啓発に出くわしたので、他の人がこの詳細を理解する必要がある場合に備えて、ここに私の所見を投稿します。
私は最近、RabbitMQ サーバーと通信するために Perl 用の AMQP API を実装しようとしているときに、この戦いを戦いました。また、この詳細に関する公式ドキュメントも見つかりませんでした。ただし、rabbitmq のドキュメントには、JAVA API のソース コードが含まれています。
http://www.rabbitmq.com/java-client.html
ソース コードの中に埋もれているのは、低レベルのフレーム構築コードを生成する Python ユーティリティです。
したがって、いくつかの背景 - プロパティは、キューに入るメッセージに添付される可能性のある属性です。これらは任意の属性ではなく、特定の定義があります。特に、プロパティは BASIC クラス (クラス # 60) のメンバーとして定義されます。BASIC クラスは、プロパティを持つ唯一のクラスです。プロパティは、コンテンツ ヘッダー フレームの末尾に表示されます。その仕様は 2 つの部分に分かれています。
プロパティ フラグは、14 個のプロパティのどれをプロパティ リストに記載するかを指定するために使用されます。これらは、プロパティ フラグの個々のビットとしてエンコードされます。BASIC クラス定義では、プロパティが順番にリストされ ( http://www.rabbitmq.com/resources/specs/amqp0-9-1.xmlを参照)、プロパティ フラグで参照されるのはこの順序です。したがって、プロパティはオクテットにフラグを立てます:
00010000 01000000 (0x 10 40)
14 個のプロパティのうち 2 つを参照します: 「delivery-mode」と「timestamp」。フラグのすべてのビットが「0」の場合は、プロパティが参照されていないことを意味します。
したがって、プロパティ リストの場合は、配信モード プロパティが最初にエンコードされ、その後にタイムスタンプが続きます。配信モードは単一のオクテットとして指定され、タイムスタンプは「long-long-uint」または 8 オクテットのネットワーク エンコード (つまり、ビッグ エンディアン) 整数として指定されます。そのコードによれば、プロパティリストのバイトは、どのプロパティフラグが設定されているかに応じて構築されます。したがって、プロパティフラグが設定されていない場合-つまり。すべてが「0」で、プロパティ リストのバイトはヘッダー フレームの一部ではありません。それでは、これらを組み立てます:
10 40 01 00 00 00 00 53 3B 2B 47
^ flags
^ delivery-mode (1 = non-persistent)
^ timestamp (1396386631 (unix epoch) = Tue Apr 1 15:10:31 2014)