2

さらに別の amqp-client を実装しようとしています (C++ 上で、基本フレームワークと高度に統合されています)。そして、コンテンツ ヘッダー ペイロードを解釈するところまで来ましたが、property-flags と property-list の関係についての明確な説明を見つけることができません。property-flags に F1%b1,F2%b1, ... ,Fn%b0 を取得した場合、property-list で期待しなければならない *amqp-field シーケンスは何ですか?

この情報を見つけることができるドキュメントを教えてください。

4

1 に答える 1

2

これは古い投稿であることは承知していますが、最近このトピックに関する啓発に出くわしたので、他の人がこの詳細を理解する必要がある場合に備えて、ここに私の所見を投稿します。

私は最近、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)
于 2014-04-01T21:23:09.933 に答える