跳到主要内容

指定消息服务质量

可以指定消息的服务质量(QoS)级别,这决定了它是作为持久(保证)、非持久还是直接消息发布的。以下部分描述了如何配置每个选项:

  • 发布持久消息
  • 发布非持久消息
  • 发布直接消息

发布持久消息

设置

  • 在附加帧中设置 Send-Settle-Mode,使用 role=sender,从客户端设置为 unsettled(0)或 mixed(2)。
  • 在消息头中将 Durable 字段设置为 true

示例代码片段

  • 使用 Qpid JMS,这是默认的 QoS。要明确指定它,请将 URL 格式化为
"amqp://" + host + ":" + port + "?jms.presettlePolicy.presettleProducers=false"

并在发送时指定传递模式:

producer.send(txMessage, DeliveryMode.PERSISTENT, 0, txLongData)
  • 使用 node-amqp10
var policy = amqp.Policy.merge({
attach: { sndSettleMode: 0 },
header: {'durable' : encoder(['boolean', true])}
});
var client = new AMQPClient(policy);
...
client.connect(uri)
.then(function() {
return Promise.all([
client.createSender('', policy),
]);
})
.spread(function(sender) {
var promises = [];
promises.push(sender.send('message', policy));
...
});
  • 使用 Qpid Proton 和 Python 绑定
message = Message(durable=True, body='message')
self.sender.send(message)
  • 使用 Qpid Proton 和 C++ 绑定
sender.snd_settle_mode = sender.SND_UNSETTLED
message = Message(durable=True, body='message')

发布非持久消息

设置

  • 在附加帧中设置 Send-Settle-Mode,使用 role=sender,从客户端设置为 unsettled(0)或 mixed(2)。
  • 在消息头中将 Durable 字段设置为 false

示例代码片段

  • 使用 Qpid JMS 格式化 URL 为
"amqp://" + host + ":" + port + "?jms.presettlePolicy.presettleProducers=false"

并在发送时指定传递模式:

producer.send(txMessage, DeliveryMode.NON_PERSISTENT, ...)
  • 使用 node-amqp10
var policy = amqp.Policy.merge({
attach: { sndSettleMode: 0 },
header: {'durable' : encoder(['boolean', false])}
});
var client = new AMQPClient(policy);
...
client.connect(uri)
.then(function() {
return Promise.all([
client.createSender('', policy),
]);
})
.spread(function(sender) {
var promises = [];
promises.push(sender.send('message', policy));
...
});
  • 使用 Qpid Proton 和 Python 绑定
message = Message(durable=False, body='message')
self.sender.send(message)
  • 使用 Qpid Proton 和 C++ 绑定
sender.snd_settle_mode = sender.SND_UNSETTLED
message = Message(durable=False, body='message')

发布直接消息

设置

  • 在附加帧中设置 Send-Settle-Mode,使用 role=sender,从客户端设置为 settled(1)。
  • 在消息头中将 Settled 字段设置为 true

大多数客户端会自动将消息头中的 Settled 字段设置为与指定的 Send-Settle-Mode 一致。

示例代码片段

  • 使用 Qpid JMS,格式化 URL 为
"amqp://" + host + ":" + port + "?jms.presettlePolicy.presettleProducers=true"
  • 使用 node-amqp10
var policy = amqp.Policy.merge({
attach: { sndSettleMode: 1 },
header: {'durable' : encoder(['boolean', false])}
});
var client = new AMQPClient(policy);
...
client.connect(uri)
.then(function() {
return Promise.all([
client.createSender('', policy),
]);
})
.spread(function(sender) {
var promises = [];
promises.push(sender.send('message', policy));
...
});
  • 使用 Qpid Proton 和 Python 绑定
self.sender = event.container.create_sender(self.url, options=AtMostOnce())
  • 使用 Qpid Proton 和 C++ 绑定
sender.snd_settle_mode = sender.SND_SETTLED