通常我使用非常简单的方法来记忆某些内容。我将在下面提供所有细节,但这里有一个基本属性字段和值的简单图片。我还试图正确突出队列/服务器和应用程序上下文。
![enter image description here](https://istack.dev59.com/fAiiq.webp)
If you want me to enhance it a bit - just drop a small comment. What I really want is to provide some visual key and simplify understanding.
高级描述(
来源1,
来源2):
请注意,Clust ID已被弃用,因此我将排除它。
- 应用程序ID - 生成消息的应用程序的标识符。
- 内容编码 - 消息内容编码。
- 上下文:应用程序使用
- 值:MIME内容编码(例如gzip)
- 内容类型 - 消息内容类型。
- 上下文:应用程序使用
- 值:MIME内容类型(例如application/json)
- 相关ID - 与此消息相关的消息,例如这条消息回复了哪个请求。鼓励应用程序使用此属性,而不是将此信息放入消息有效负载中。
- 传递模式 - 是否将消息持久化到磁盘?
- 上下文:队列实现使用
- 值:非持久性(1)或持久性(2)
- 过期时间 - 消息将被删除的过期时间。过期字段的值描述以毫秒为单位的TTL周期。请参见下面的详细信息。
- 标头 - 任意应用程序特定的消息标头。
- 消息ID - 消息标识符字符串。如果应用程序需要标识消息,则建议使用此属性,而不是将其放入消息有效负载中。
- 优先级 - 消息优先级。
- 回复地址 - 其他应用程序应将响应发送到的队列名称。通常用于命名回复队列(或任何其他标识符,可帮助消费者应用程序指示其响应)。鼓励应用程序使用此属性,而不是将此信息放入消息有效负载中。
- 时间戳 - 发送消息时的时间戳。
- 类型 - 消息类型,例如此消息表示的事件或命令类型。建议应用程序使用此属性,而不是将此信息包含在消息有效负载中。
- 用户ID - 可选的用户ID。由RabbitMQ针对实际连接用户名进行验证。
- 上下文:队列实现使用
- 值:应该是经过身份验证的用户。
顺便说一下,我终于成功地审查了最新的服务器代码(rabbitmq-server-3.1.5),rabbit_stomp_test_util.erl中有一个例子:
content_type = <<"text/plain">>,
content_encoding = <<"UTF-8">>,
delivery_mode = 2,
priority = 1,
correlation_id = <<"123">>,
reply_to = <<"something">>,
expiration = <<"my-expiration">>,
message_id = <<"M123">>,
timestamp = 123456,
type = <<"freshly-squeezed">>,
user_id = <<"joe">>,
app_id = <<"joe's app">>,
headers = [{<<"str">>, longstr, <<"foo">>},
{<<"int">>, longstr, <<"123">>}]
很高兴有人想知道所有细节。因为在可能的情况下,使用众所周知的消息属性比将信息放在消息正文中要好得多。顺便说一句,基本的消息属性远非清晰和有用。我会说最好使用自定义属性。
![enter image description here](https://istack.dev59.com/jQO3R.webp)
好的例子 (source)
![enter image description here](https://istack.dev59.com/bOm4t.webp)
更新 - 过期时间字段
重要提示: 过期时间 属于队列上下文。因此,消息可能会被服务器丢弃。
![enter image description here](https://istack.dev59.com/ionkb.webp)
README中写道:
expiration
是一个shortstr类型的变量;RabbitMQ希望这是一个编码过的字符串,所以我们将ttl
翻译为其整数值的字符串表示。
参考资料: