本页面提供 RabbitMQ 实现 AMQP 0-9-1 的指南。除了在AMQP 规范中定义的类和方法外,RabbitMQ 还支持多个协议扩展,这些扩展也列在此处。原始和扩展规范下载可以在协议页面上找到。
还提供了简短的AMQP 0-9-1 概述。
为了方便起见,本指南提供了指向 RabbitMQ Java 和 .NET 客户端 API 指南相关部分的链接。每个方法及其参数的完整详细信息可在我们的完整 AMQP 0-9-1 参考中找到。
基本
basic.ack(
delivery-tag delivery-tag,
bit multiple)
支持:完整
确认一条或多条消息。
当客户端发送时,此方法确认通过 Deliver 或 Get-Ok 方法传递的一条或多条消息。当服务器发送时,此方法确认在确认模式下在通道上使用 Publish 方法发布的一条或多条消息。确认可以针对单个消息或一组消息(直至且包括特定消息)。
[javadoc][dotnetdoc][amqpdoc](返回顶部)basic.cancel(
consumer-tag consumer-tag,
no-wait no-wait) ➔ cancel-ok
支持:完整
结束队列消费者。
此方法取消消费者。这不会影响已传递的消息,但它确实意味着服务器不会再为该消费者发送任何消息。客户端可能会在发送 cancel 方法和接收 cancel-ok 回复之间接收任意数量的消息。它也可能由服务器发送到客户端,以防消费者意外取消(即,由于任何原因取消,而不是服务器收到客户端相应的 basic.cancel)。这允许客户端在由于队列删除等事件导致消费者丢失时获得通知。请注意,由于客户端不必接受服务器的此方法,因此建议代理能够通过某种能力协商方式识别能够接受此方法的客户端。
[javadoc][dotnetdoc][amqpdoc](返回顶部)basic.consume(
short reserved-1,
queue-name queue,
consumer-tag consumer-tag,
no-local no-local,
no-ack no-ack,
bit exclusive,
no-wait no-wait,
table arguments) ➔ consume-ok
支持:部分
启动队列消费者。
此方法要求服务器启动一个“消费者”,这是一个来自特定队列的消息瞬态请求。消费者持续存在于声明它们的通道上,或者直到客户端取消它们为止。
[javadoc]
[dotnetdoc]
[amqpdoc](返回顶部)basic.deliver(
consumer-tag consumer-tag,
delivery-tag delivery-tag,
redelivered redelivered,
exchange-name exchange,
shortstr routing-key)
支持:完整
通知客户端消费者消息。
此方法通过消费者将消息传递给客户端。在异步消息传递模型中,客户端使用 Consume 方法启动消费者,然后服务器在消息到达该消费者时使用 Deliver 方法进行响应。
[amqpdoc](返回顶部)basic.get(
short reserved-1,
queue-name queue,
no-ack no-ack) ➔ get-ok | get-empty
支持:完整
直接访问队列。
此方法提供对队列中消息的直接访问,使用旨在用于同步功能比性能更重要的特定类型应用程序的同步对话。
[javadoc][dotnetdoc][amqpdoc](返回顶部)basic.nack(
delivery-tag delivery-tag,
bit multiple,
bit requeue)
此方法是 AMQP 的 RabbitMQ 特定扩展
拒绝一条或多条传入消息。
此方法允许客户端拒绝一条或多条传入消息。它可用于中断和取消大型传入消息,或将无法处理的消息返回到其原始队列。此方法还用于服务器在确认模式下通知通道上的发布者未处理的消息。如果发布者收到此方法,则可能需要重新发布有问题的消息。
basic.publish(
short reserved-1,
exchange-name exchange,
shortstr routing-key,
bit mandatory,
bit immediate)
支持:完整
发布消息。
此方法将消息发布到特定的交换机。消息将根据交换机配置路由到队列,并在事务(如果有)提交时分发给任何活动的消费者。
[javadoc]
[dotnetdoc]
[amqpdoc](返回顶部)basic.qos(
long prefetch-size,
short prefetch-count,
bit global) ➔ qos-ok
支持:部分
指定服务质量。
此方法请求特定的服务质量。可以为当前通道或连接上的所有通道指定 QoS。qos 方法的特定属性和语义始终取决于内容类语义。尽管 qos 方法原则上可以应用于两个对等方,但目前仅对服务器有意义。
[javadoc][dotnetdoc][amqpdoc](返回顶部)basic.recover(
bit requeue)
支持:部分
重新传递未确认的消息。
此方法要求服务器重新传递指定通道上的所有未确认的消息。可以重新传递零条或多条消息。此方法替换异步 Recover。
[javadoc][dotnetdoc][amqpdoc](返回顶部)basic.recover-async(
bit requeue)
重新传递未确认的消息。
此方法要求服务器重新传递指定通道上的所有未确认的消息。可以重新传递零条或多条消息。此方法已弃用,取而代之的是同步 Recover/Recover-Ok。
[javadoc][dotnetdoc][amqpdoc](返回顶部)basic.reject(
delivery-tag delivery-tag,
bit requeue)
支持:部分
拒绝传入的消息。
此方法允许客户端拒绝消息。它可用于中断和取消大型传入消息,或将无法处理的消息返回到其原始队列。
RabbitMQ 博客文章[javadoc][dotnetdoc][amqpdoc](返回顶部)basic.return(
reply-code reply-code,
reply-text reply-text,
exchange-name exchange,
shortstr routing-key)
支持:完整
返回失败的消息。
此方法返回使用“immediate”标志设置发布的不可传递消息,或使用“mandatory”标志设置的不可路由消息。回复代码和文本提供有关消息不可传递的原因的信息。
[amqpdoc](返回顶部)通道
channel.close(
reply-code reply-code,
reply-text reply-text,
类ID 类ID,
方法ID 方法ID) ➔ close-ok
支持:完全
请求关闭通道。
此方法表示发送方希望关闭通道。这可能是由于内部条件(例如强制关闭)或由于处理特定方法的错误(即异常)导致的。当关闭是由于异常导致时,发送方会提供导致异常的方法的类和方法 ID。
[javadoc][dotnetdoc][amqpdoc](返回顶部)channel.flow(
比特 active) ➔ flow-ok
支持:部分
启用/禁用来自对等方的流。
此方法要求对等方暂停或重新启动由消费者发送的内容数据的流。这是一种简单的流量控制机制,对等方可以使用它来避免其队列溢出或以其他方式发现自己接收到的消息多于其能够处理的消息。请注意,此方法并非用于窗口控制。它不影响 Basic.Get-Ok 方法返回的内容。
[amqpdoc](返回顶部)确认
此类是 AMQP 的 RabbitMQ 特定扩展
交换机
exchange.bind(
short reserved-1,
交换机名称 destination,
交换机名称 source,
短字符串 routing-key,
no-wait no-wait,
表 arguments) ➔ bind-ok
此方法是 AMQP 的 RabbitMQ 特定扩展
将交换机绑定到交换机。
此方法将一个交换机绑定到另一个交换机。
RabbitMQ 文档 RabbitMQ 博客文章 [javadoc]
[dotnetdoc]
[amqpdoc](返回顶部)exchange.declare(
short reserved-1,
exchange-name exchange,
短字符串 type,
比特 passive,
比特 durable,
比特 auto-delete*,
比特 internal*,
no-wait no-wait,
table arguments) ➔ declare-ok
* AMQP 的 RabbitMQ 特定扩展
支持:完全
验证交换机是否存在,如果需要则创建。
此方法创建交换机(如果它尚不存在),如果交换机存在,则验证它是否属于正确且预期的类。
RabbitMQ 实现了对 AMQP 0-9-1 规范的扩展,允许将不可路由的消息传递到备用交换机 (AE)。AE 功能有助于检测客户端何时发布无法路由的消息,并可以提供“否则”路由语义,其中一些消息会被专门处理,其余消息则由通用处理程序处理。
[dotnetdoc]
[amqpdoc](返回顶部)exchange.delete(
short reserved-1,
exchange-name exchange,
比特 if-unused,
no-wait no-wait) ➔ delete-ok
支持:部分
删除交换机。
此方法删除交换机。当交换机被删除时,交换机上的所有队列绑定都会被取消。
[javadoc][dotnetdoc][amqpdoc](返回顶部)exchange.unbind(
short reserved-1,
交换机名称 destination,
交换机名称 source,
短字符串 routing-key,
no-wait no-wait,
表 arguments) ➔ unbind-ok
此方法是 AMQP 的 RabbitMQ 特定扩展
解除交换机与交换机的绑定。
此方法解除交换机与交换机的绑定。
[javadoc][dotnetdoc]
[amqpdoc](返回顶部)队列
queue.bind(
short reserved-1,
queue-name queue,
交换机名称 exchange,
短字符串 routing-key,
no-wait no-wait,
表 arguments) ➔ bind-ok
支持:完全
将队列绑定到交换机。
此方法将队列绑定到交换机。在队列绑定之前,它不会接收任何消息。在经典的消息传递模型中,存储转发队列绑定到直接交换机,订阅队列绑定到主题交换机。
[javadoc][dotnetdoc]
[amqpdoc](返回顶部)queue.declare(
short reserved-1,
queue-name queue,
比特 passive,
比特 durable,
比特 exclusive,
比特 auto-delete,
no-wait no-wait,
table arguments) ➔ declare-ok
支持:完全
声明队列,如果需要则创建。
此方法创建或检查队列。在创建新队列时,客户端可以指定各种属性来控制队列及其内容的持久性,以及队列的共享级别。
RabbitMQ 实现了对 AMQP 0-9-1 规范的扩展,允许队列的创建者控制其行为的各个方面。
每个队列的消息 TTL
此扩展确定发布到队列的消息可以存活多长时间,然后再被服务器丢弃。生存时间通过此方法的参数参数中的x-message-ttl参数配置。
队列过期
队列可以声明一个可选的租期。租期确定队列可以在未使用多长时间后被服务器自动删除。租期作为此方法的参数参数中的x-expires参数提供。
x-message-ttl 文档 x-expires 文档 [javadoc]
[dotnetdoc]
[amqpdoc](返回顶部)queue.delete(
short reserved-1,
queue-name queue,
比特 if-unused,
比特 if-empty,
no-wait no-wait) ➔ delete-ok
支持:部分
删除队列。
此方法删除队列。当队列被删除时,任何挂起的邮件都会发送到死信队列(如果在服务器配置中定义了此队列),并且队列上的所有消费者都会被取消。
[javadoc][dotnetdoc][amqpdoc](返回顶部)queue.purge(
short reserved-1,
queue-name queue,
no-wait no-wait) ➔ purge-ok
支持:完全
清空队列。
此方法删除队列中所有未等待确认的消息。
[javadoc][dotnetdoc][amqpdoc](返回顶部)queue.unbind(
short reserved-1,
queue-name queue,
exchange-name exchange,
短字符串 routing-key,
表 arguments) ➔ unbind-ok
支持:部分
解除队列与交换机的绑定。
此方法解除队列与交换机的绑定。
[javadoc][dotnetdoc]
[amqpdoc](返回顶部)事务
tx.commit() ➔ commit-ok
支持: 完全支持
提交当前事务。
此方法提交当前事务中执行的所有消息发布和确认。提交后立即开始一个新的事务。
[javadoc][dotnetdoc][amqpdoc](返回顶部)tx.rollback() ➔ rollback-ok
支持: 完全支持
放弃当前事务。
此方法放弃当前事务中执行的所有消息发布和确认。回滚后立即开始一个新的事务。请注意,未确认的消息不会因回滚而自动重新投递;如果需要,应发出显式的恢复调用。
[javadoc][dotnetdoc][amqpdoc](返回顶部)tx.select() ➔ select-ok
支持: 完全支持
选择标准事务模式。
此方法将通道设置为使用标准事务。客户端必须在使用 Commit 或 Rollback 方法之前至少在通道上使用此方法一次。
[javadoc][dotnetdoc][amqpdoc](返回顶部)获取帮助和提供反馈
如果您对本指南内容或任何其他与 RabbitMQ 相关的主题有任何疑问,请随时使用 GitHub 讨论 或我们的社区 Discord 服务器 提问。
帮助我们改进文档 <3
如果您想为网站贡献改进,其源代码可在 GitHub 上获取。只需分叉存储库并提交拉取请求即可。谢谢!