AMQP-核心概念-1

本文参考以下链接摘录翻译:

https://www.rabbitmq.com/tutorials/amqp-concepts

AMQP (Advanced Message Queuing Protocol)

高级消息队列协议,一个消息协议,用于实现客户端应用与消息中间件的通讯。

消息代理及关联的角色

消息代理接收生产者/发布者发布的消息,将消息路由给消费者。(发布消息的应用被称为发布者或生产者,处理该消息的应用称为消费者)

因为AMQP是一个网络协议,生产者、消费者、消息代理可以部署在不同的机器上。

AMQP模型简介

消息被发布到交换机,交换机可类比为邮局或邮箱。

交换机使用绑定(bindings即路由规则)将消息副本分发到队列(queues)。

然后消息代理要么把消息派送给订阅了队列的消费者,或者消费者根据自己的需要从队列获取消息。

队列只是消息暂存的地方,所有的活都是交换机在干!

当发布一条消息时,发布者可能会定义各种消息属性(消息元数据)。部分元数据可能会被消息代理使用,尽管如此,剩下的数据对消息代理是完全透明的,这部分数据只会被接收消息的应用使用。

网络是不可靠的,而且应用可能会处理消息失败,因此AMQP 0-9-1提供了一钟消息确认机制(ack)。当一条消息发送给一个消费者时,消费者通知消息代理,要么自动发送或者程序员选择通知时机。当启用了ack机制,消息代理只有在收到ack通知后会完全删除一条消息(或一组消息)。

在有些情形,例如,当一条消息无法路由时,消息可能会被退回给发布者,或者丢弃掉,或者,如果消息代理实现了死信队列(deal letter queue),消息会被放入死信队列。发布者可以在发布消息时用一些参数来决定如何处理类似的情况。

队列(queues),交换机(exchanges),绑定(bindings)都是AMQP的实体(entities)。

AMQP是一个可编程的协议

当AMQP 0-9-1实体和路由机制由应用自己定义,而不是消息代理管理员配置时,AMQP 0-9-1是一个可编程的协议。相应地,协议提供了对:声明队列和交换机,定义绑定规则,订阅队列等操作的支持。【就是说客户端应用可以自己声明队列、交换机、绑定等,不用找消息代理管理员配置

这给了应用程序员很多自由,但也要求他们注意潜在的定义冲突。从实践来看,冲突很少,通常是配置错误。

应用声明自己需要的AMQP 0-9-1实体,定义必要的路由机制,当实体不再使用时,可以选择删除不需要的AMQP 0-9-1实体。

交换机和交换机类型

交换机是生产者将消息发送到的地方。交换机取出一条消息并将它路由到0个或很多个队列。使用的路由算法由交换机类型和路由规则决定。AMQP 0-9-1 消息代理提供了4种交换机类型:

交换机类型
交换机类型默认预声明名字

Direct exchange

空字符串 或 amq.direct

Fanout exchange

amq.fanout

Topic exchange

amq.topic
Headers exchangeamq.match (and amq.headers in RabbitMQ)

除了交换机类型,交换机声明时可以设置一些属性,最重要的属性如下:

  • Name 名字
  • Durability 持久性,让交换机在消息代理重启后依然存在
  • Auto-delete 自动删除,当最后一个队列与交换机解绑时,交换机被删除
  • Arguments 参数,可选,供插件和消息代理使用

交换机可以是持久的或者临时的。持久的交换机在消息代理服务器重启后依然存在,临时交换机会丢失(当消息代理恢复时,临时交换机必须重新声明)。

不是所有的情景和用例都需要持久化的交换机

待续。。。

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值