赞
踩
1、应用解耦
2、异步消息通信
3、流量削峰
4、日志处理
概念 | 描述 |
---|---|
Broker | 接收和分发消息的应用,RabbitMQ Server就是Message Broker。 |
Virtual Host | 为了在一个单独的代理上实现多个隔离的环境(用户、用户组、交换机、队列 等),AMQP 提供了一个虚拟主机(virtual hosts)的概念,当多个不同的用户使用同一个RabbitMQ时,可以划分出多个vhost,每个用户在自己的vhost创建exchange、queue等。 |
Connection | 生产者、消费者和Broker之间的TCP连接。 |
Channel | 是在Connection内部建立的逻辑连接,它作为轻量级的Connection,极大减少了操作系统建立TCP连接的开销。 |
Exchange | 交换机,用于接收消息,根据分发规则,匹配Routing Key,分发消息到队列中去。 |
Queue | 队列,消息最终被送到这里等待消费者取走。 |
Binding | 用于描述消息队列与交换机之间的关系。一个绑定就是基于路由键将交换机和消息队列连接起来的路由规则。因此可以将交换器看成一个由绑定构成的路由表 |
Routing Key | 路由规则,可用来确定如何路由一个特定消息。 |
Message | 消息 |
Publisher | 消息发布者 |
Consumer | 消费者 |
RabbitMQ消息传递的核心思想是: 生产者从不直接像队列发送任何消息
交换机的类型:
fanout(广播):它仅将收到的所有消息广播到所有队列 direct(路由):交换机只向与其绑定的队列发送消息,交换机和队列之间产生关联需要使用Routing key
topic:topic交换机是在direct交换机的基础上,支持了对routing key的通配符匹配(和#),如果队列绑定的路由键是#
,那么这个队列可以接收所有数据,就类似于fanout交换机了,如果队列绑定的路由键键当中没有#
和``,那么是direct交换机了
headers:是通过匹配AMQP消息的headers,而不是路由键
轮询分发:一个消费者消费一条,平均分配
公平分发:根据消费者消费能力进行公平分发,处理快的处理的多处理慢的处理的少;按劳分配
自己确认:自己确认表示消息发送给消费者后立即确认,但存在丢失消息的可能,如果消费端逻辑抛出异常,也就是消费端没有成功处理这条消息,那就相当于丢失了消息。
手动确认:如果一个消费者在处理消息时因为网络不稳定、服务器异常,就无法获得ACK反馈,RabbitMQ会认为这个消息没有正常消费,并将其重新放入队列中。
忘记确认消息:当消费者退出时,消息将被重新传送到RabbitMq队列,RabbitMQ会消耗越来越多的内存,因为他无法释放任何未确认的消息,此时就会造成内存泄漏。
1、消息被消费者拒绝,并且没有重新入队
2、消息过期
3、由于队列达到最大长度,队首的消息被丢弃(队列满了之后,如果继续往队列中发送消息,那么队首的消息就会成为死信)
延迟队列存储的消息一般都是延时消息
,所谓延时消息
是指当消息被发送以后,并不想让消费者立即消费消息,而是等待指定时间后,才允许消费者来消费这条消息;
应用场景:
如果下单后30分钟未支付,实现订单自动取消
注册了某个网站,24小时没有登录,可以发送短信通知
使用死信队列实现延迟队列功能
固定延迟时间的消息,为队列上的消息设置过期时间即可
不固定延迟时间的消息,需要在发送消息时设置消息的过期时间
注意:过期时间短的消息的不一定先被消费
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。