43 java messaging amqp rabbitmq
在RabbitMQ/AMQP Java客户端中,您可以创建一个AMQP.BasicProperties.Builder
,并将其用于build()
实例AMQP.BasicProperties
.然后,可以将此构建的属性实例用于各种重要事项.此构建器类上有许多"构建器"样式方法:
BasicProperties.Builder propsBuilder = new BasicProperties.Builder();
propsBuilder
.appId(???)
.clusterId(???)
.contentEncoding(???)
.contentType(???)
.correlationId(???)
.deliveryMode(2)
.expiration(???)
.headers(???)
.messageId(???)
.priority(???)
.replyTo(???)
.timestamp(???)
.type(???)
.userId(???);
Run Code Online (Sandbox Code Playgroud)
我正在寻找这些builer方法帮助"建立"的字段,最重要的是,每个字段存在哪些有效值.例如,什么是a clusterId
,它的有效值是什么?什么是type
有效值?等等.
我整个上午都在淘洗:
在所有这些文档,我无法找到明确的定义(除了一些含糊的解释是什么priority
,contentEncoding
以及deliveryMode
是)什么的每个领域都,以及他们的有效值.有人知道吗?更重要的是,有人知道这些甚至记录在哪里吗?提前致谢!
Ren*_*nov 79
通常我会用非常简单的方法记忆一些东西.我将在下面提供所有细节,但这里是BasicProperties字段和值的简单图片.我还试图正确突出显示队列/服务器和应用程序上下文.
如果你想让我加强一点 - 只需删掉一个小评论.我真正想要的是提供一些视觉键并简化理解.
请注意Clust ID已被弃用,因此我将其排除.
顺便说一句,我终于设法审查了最新的服务器代码(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">>}]
Run Code Online (Sandbox Code Playgroud)
很高兴知道有人想知道所有的细节.因为在可能的情况下使用众所周知的消息属性要好得多,而不是在消息体中放置信息.顺便说一下,基本的消息属性远非清晰有用.我会说最好使用自定义的.
很好的例子(来源)
更新 - 到期字段
重要说明:到期属于队列上下文.因此服务器可能会丢弃该消息.
自述文件说明如下:
expiration
是一个短暂的; 因为RabbitMQ会期望这是一个编码字符串,我们将a转换ttl
为其整数值的字符串表示.
资料来源:
Gle*_*est 10
在撰写本文时:
在这个答案中:
contentType
和contentEncoding
- 这是安全的,因为这些是AMQP 1.0中具有良好描述的标准字段. 我从这些来源中解释了以下文字,使其更加简洁或清晰.
如您所见,绝大多数这些属性没有枚举/约束/推荐值,因为它们只是"仅应用程序",并且不被RabbitMQ使用.所以你有一份轻松的工作.您可以自由地编写/读取对您的应用程序有用的值 - 只要它们匹配数据类型并编译:). ContentType
并contentEncoding
按照标准HTTP使用. DeliveryMode
并且priority
是受约束的数字.
注意:在MessageProperties类中可以使用AMQP.BasicProperties的有用但简单的常量.
干杯:)
更新到POST:
非常感谢Renat(参见评论),看了一下rabbit_amqqueue_process.erl中的erlang服务器代码和RabbitQQ TTL Extensions到AMQP的文档.可以指定消息到期(生存时间)
每个队列通过:
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-message-ttl", 60000);
channel.queueDeclare("myqueue", false, false, false, args);
Run Code Online (Sandbox Code Playgroud)或通过以下消息:
byte[] messageBodyBytes = "Hello, world!".getBytes();
AMQP.BasicProperties properties = new AMQP.BasicProperties();
properties.setExpiration("60000");
channel.basicPublish("my-exchange", "routing-key", properties, messageBodyBytes);
Run Code Online (Sandbox Code Playgroud)这里,ttl/expiration以毫秒为单位,每种情况下为60秒.已更新上述过期定义以反映此情况.
归档时间: |
|
查看次数: |
16592 次 |
最近记录: |