AMQP 基本概念

AMQP: Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端、中间件不同产品,不同开发语言等条件的限制。
AMQP 0-9-1模型
AMQP 0-9-1的工作过程:消息(message)被发布者(publisher)发送给交换机(exchange),交换机接收到消息根据路由规则分发给绑定的队列(queue)。最后AMQP代理会将消息投递给订阅此队列的消费者或者消费者按需求自行获取。
在这里插入图片描述
发布者(publisher)发布消息时可以指定各种消息属性(message meta-data)。有些属性可能会被消息代理(bokers)使用。
从安全角度考虑,网络是不可靠的,发送消息,和接收消息 都是不可靠的。(发送和接收的确认机制)。无法实现生产者到消费者直接的确认机制。
由此我想到的可能引发的问题:
1.生产者发送消息失败
2.消息无接收队列
3.消费者处理失败
4.消费者接收到的消息已超时

交换机(Exchange)
交换机接收生成者 或 其他交换机的消息,按照交换机类型和路由键投递给其他交换机或者消息队列。
交换机只转发消息不存储消息

交换机的类型
DirectExchange 直连交换机
FanoutExchange 扇形交换机
TopicExchange 主题交换机
HeadersExchange 头交换机

DirectExchange 直连交换机
需要路由器绑定的路由键完全匹配才能转发消息
FanoutExchange 扇形交换机
群发绑定路由器的所有的队列和交换机
TopicExchange 扇形交换机
安照通配符匹配路由键转发消息

消息队列(Queue)
消息队列会将消息存储到内存或者磁盘中,并将消息按照一定顺序转发给一个或多个消费者,每个消息队列都是独立隔离的,相互不影响。
消息队列具有不同的属性:私有,共享,持久化,临时。客户端定义或者服务器定义等,可以基于实际需求选择对应的类型。

消息(Message)
消息由header 和 Body组成,存放的是二进制的消息。Header主要存放的是routingkey。
消息的生命周期
1.根据客户端传来的消息内容及相关属性(目标Exchange,routing Keys, mandatory 及 immediate 属性)构造一个消息实体。
2.根据要投递的Exchange 及 Rounting keys匹配消息的目标投递队列名称;
3.根据队列名称找到对应的处理进程ID
4.通过Deliver消息向目标进程投递消息实体。
5.队列对应进程接收到消息后,会试图向关联的到此队列的消费者投递消息,如果投递失败,或者直接丢弃,或者将消息入列,入列时会根据消息及队列属性 是否 durable 判断是否需要写入磁盘;
6.保存到队列的消息,在下次消费者关联到对应队列时,试图重新投递,知道投递成功,或者因为过期被丢弃掉。

消息属性
content-type 指定消息类型(mime-types)便于序列化、反序列化
content-encoding 消息使用某种体术方式进行压缩或者编码
message-id 和 correlation-id 唯一标识消息和消息响应,用于实现消息跟踪
timestamp 减少消息大小,描述消息创建时间
expiration 表明消息过期
delivery-mode 消息队列存储模式
app-id 或 use-id 帮助追踪出现问题的消息发布者应用程序
type 定义发布者和消费者之间的契约
reply-to 实现影响的路由
headers 映射表定义字有个事的属性

虚拟主机(virtual host)
为了一个单独代理上实现多个隔离环境(用户、用户组、交换机、队列等),AMQP 提供了一个虚拟主机的概念,当建立连接时,由客户端来指定使用哪个虚拟主机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值