2013-10-16 16 views
6

Próbuję wysłać wiadomość z metadanymi przez Erlang client i nie mogę zrozumieć, jak ustawić niestandardowe nagłówki aplikacji w rekordzie właściwości podstawowych wiadomości. Próbowałem wszystkie te opcje bez powodzenia:Jak korzystać z nagłówków wiadomości w kliencie RabbitMQ firmy Erlang?

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

Wydaje się, że nagłówki użyć jakieś specjalne struktury danych została AMQP stole - ale nie mogłem znaleźć żadnej dokumentacji lub przykłady w tej sprawie.

Jaki jest prawidłowy sposób wysyłania wiadomości z nagłówkami?

Aktualizacja:stack trace (właściwie, to nie jest istotne - przyczyną tego błędu jest cicho zamknięty kanał) i źródło code.

Odpowiedz

5

Czy pojawiają się błędy podczas próby wysłania wiadomości z nagłówkami?

Czy próbowałeś użyć typu łańcucha dla klucza i wartości?

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

Aktualizacja: badałem kod źródłowy rabbit_common pakietu i znalazłem coś o typie nagłówków. Jest tam nagłówki typu() w rabbit_basic.erl:

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

I istnieje definicja typów w module rabbit_framing_amqp:

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

więc nagłówek jest krotką trzech elementów (nie dwa) , które są binarne, typ wartości, wartość. Więc trzeba definiować każdy nagłówek drogę tak:

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

Dodałem ślad stosu na pytanie - ale to nie pomoże, wierzę, ponieważ po prostu zamyka kanał AMQP nagle po „podstawowy .publikować "połączenie. Typ wartości również nie ma znaczenia - próbowałem ciągów i liczb całkowitych. – NikitaBaksalyar

+0

Dziękuję - działa idealnie! To dziwne, że to zachowanie nie jest dobrze udokumentowane. – NikitaBaksalyar

Powiązane problemy