2013-10-16 6 views
6

メタデータを含むメッセージをErlang client経由で送信しようとしていますが、メッセージの基本プロパティレコードにカスタムアプリケーションヘッダーを設定する方法を理解できません。ノー成功を持つすべてのこれらのオプションを試してみた:RabbitMQのErlangクライアントでメッセージヘッダーを使用するには?

#'P_basic'{headers = [{<<"key">>, <<"value">>}]} 
#'P_basic'{headers = [{"key", <<"value">>}]} 
#'P_basic'{headers = [{key, <<"value">>}]} 

ヘッダがいくつかの特殊なデータ構造、AMQPテーブルを使用するようだ - しかし、私はこの問題上の任意のドキュメントや例を見つけることができませんでした。

ヘッダーを含むメッセージを送信する正しい方法は何ですか?

更新:stack trace(実際には、それが関連していないのです - そのエラーの原因は黙って、閉じたチャネルである)とソースcode

答えて

5

ヘッダーでメッセージを送信しようとしてエラーが発生しましたか?

キーと値の両方に文字列型を使用しようとしましたか?

#'P_basic'{headers = [{"key", "value"}]} 

アップデート:私は、パッケージrabbit_commonのソースコードを調査し、私は、ヘッダータイプについて何かを見つけました。

-type(amqp_field_type() :: 
     'longstr' | 'signedint' | 'decimal' | 'timestamp' | 
     'table' | 'byte' | 'double' | 'float' | 'long' | 
     'short' | 'bool' | 'binary' | 'void' | 'array'). 
-type(amqp_property_type() :: 
     'shortstr' | 'longstr' | 'octet' | 'shortint' | 'longint' | 
     'longlongint' | 'timestamp' | 'bit' | 'table'). 

-type(amqp_table() :: [{binary(), amqp_field_type(), amqp_value()}]). 
-type(amqp_array() :: [{amqp_field_type(), amqp_value()}]). 
-type(amqp_value() :: binary() | % longstr 
         integer() | % signedint 
         {non_neg_integer(), non_neg_integer()} | % decimal 
         amqp_table() | 
         amqp_array() | 
         byte() |  % byte 
         float() |  % double 
         integer() | % long 
         integer() | % short 
         boolean() | % bool 
         binary() | % binary 
         'undefined' | % void 
         non_neg_integer() % timestamp 
    ). 

だからヘッダは三つの項目のタプルが(二ない)である。rabbit_basic.erlにおけるタイプヘッダ()がある:

-type(headers() :: rabbit_framing:amqp_table() | 'undefined'). 

およびモジュールrabbit_framing_amqpにおけるタイプの定義が存在しますこれはバイナリ、値の型、値です。だから、各ヘッダにそのような方法を定義する必要があります:私は質問にスタックトレースを追加しました

BooleanHeader = {<<"my-boolean">>, bool, true}. 
StringHeader = {<<"my-string">>, longstr, <<"value">>}. 
IntHeader = {<<"my-int">>, long, 1000}. 
+0

を - しかし、AMQPチャンネルは単に「基本後に突然閉じているので、それは、私は信じて、役に立ちません.publish '呼び出し。値の型も違いはありません - 文字列と整数を試しました。 – NikitaBaksalyar

+0

ありがとうございます - それは完璧に動作します!この動作がうまく文書化されていないのは奇妙です。 – NikitaBaksalyar

関連する問題