gpt4 book ai didi

erlang - 如何在 RabbitMQ 的 Erlang 客户端中使用消息头?

转载 作者:行者123 更新时间:2023-12-04 15:12:00 28 4
gpt4 key购买 nike

我正在尝试通过 Erlang client 发送带有元数据的消息,但我不明白应该如何在消息的基本属性记录中设置自定义应用程序 header 。我已经尝试了所有这些选项但没有成功:

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

似乎 header 使用了一些特殊的数据结构,即 AMQP 表 - 但我找不到任何关于此问题的文档或示例。

发送带有标题的消息的正确方法是什么?

更新: A stack trace (实际上,它不相关-该错误的原因是静默关闭的 channel )和源 code

最佳答案

尝试发送带有标题的消息时是否遇到任何错误?

您是否尝试对键和值都使用字符串类型?

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

更新:我调查了包 rabbit_common 的源代码,发现了一些关于 headers 类型的信息。 rabbit_basic.erl 中有一个类型 headers():
-type(headers() :: rabbit_framing:amqp_table() | 'undefined').

并且在模块 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
).

所以头部是三项(不是两项)的元组,分别是二进制、值类型、值。所以你必须像这样定义每个标题:
BooleanHeader = {<<"my-boolean">>, bool, true}.
StringHeader = {<<"my-string">>, longstr, <<"value">>}.
IntHeader = {<<"my-int">>, long, 1000}.

关于erlang - 如何在 RabbitMQ 的 Erlang 客户端中使用消息头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408705/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com