2013-10-16 14 views
6

Erlang client aracılığıyla meta veriler içeren bir ileti göndermeye çalışıyorum ve iletinin temel özellik kaydında nasıl özel uygulama üstbilgileri ayarlayacağımı anlayamıyorum. Hiçbir başarı ile tüm bu seçenekleri denedim:RabbitMQ'nun Erlang istemcisindeki ileti üstbilgileri nasıl kullanılır?

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

Başlıklann bazı özel veri yapısını, bir AMQP tablo kullanmak gibi görünüyor - ama bu konuda herhangi bir belge ya da örnekler bulamadık.

Üstbilgileriyle ileti göndermenin doğru yolu nedir?

Güncelleme: A stack trace (aslında, alakalı değil - o hatanın nedeni sessizce kapalı kanal olduğu) ve kaynağını code.

cevap

5

Başlıklarla ileti göndermeye çalışırken hata alıyor musunuz?

Hem anahtar hem de değer için dize türünü kullanmayı denediniz mi?

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

Güncelleme

: Ben paket rabbit_common kaynak kodunu araştırdık ve ben başlıklarını türü hakkında bir şey öğrendim.

-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 
    ). 

Yani başlık üç öğenin tuple (iki değil) 'dir: rabbit_basic.erl bir tür başlıkları() vardır:

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

Ve modül rabbit_framing_amqp içinde türlerinin tanımı vardır , ikili, değer türü, değer. Yani her başlığını böyle bir yol tanımlamak zorunda: Ben soruya bir yığın izlemesi ekledik

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

- ama bir AMQP kanal sadece 'temel sonra aniden kapanır, çünkü inanıyorum ki yardımcı olmaz .publish 'çağrısı. Bir değer türü de bir fark yaratmaz - dizeleri ve tam sayıları denedim. – NikitaBaksalyar

+0

Teşekkür ederim - mükemmel çalışıyor! Bu davranışın belgelenmemiş olması garip. – NikitaBaksalyar

İlgili konular