当前位置:   article > 正文

RabbitMQ消息中间件

rabbitmq消息中间件

使用场景

1、应用解耦

2、异步消息通信

3、流量削峰

4、日志处理

AMQP协议

概念描述
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交换机

RabbitMQ消息传递的核心思想是: 生产者从不直接像队列发送任何消息

交换机的类型:

fanout(广播):它仅将收到的所有消息广播到所有队列 direct(路由):交换机只向与其绑定的队列发送消息,交换机和队列之间产生关联需要使用Routing key

topic:topic交换机是在direct交换机的基础上,支持了对routing key的通配符匹配(和#),如果队列绑定的路由键是#,那么这个队列可以接收所有数据,就类似于fanout交换机了,如果队列绑定的路由键键当中没有#和``,那么是direct交换机了

headers:是通过匹配AMQP消息的headers,而不是路由键

RabbitMQ的工作队列模式

轮询分发:一个消费者消费一条,平均分配

公平分发:根据消费者消费能力进行公平分发,处理快的处理的多处理慢的处理的少;按劳分配

消费者确认模式(ACK机制)

自己确认:自己确认表示消息发送给消费者后立即确认,但存在丢失消息的可能,如果消费端逻辑抛出异常,也就是消费端没有成功处理这条消息,那就相当于丢失了消息。

手动确认:如果一个消费者在处理消息时因为网络不稳定、服务器异常,就无法获得ACK反馈,RabbitMQ会认为这个消息没有正常消费,并将其重新放入队列中。

忘记确认消息:当消费者退出时,消息将被重新传送到RabbitMq队列,RabbitMQ会消耗越来越多的内存,因为他无法释放任何未确认的消息,此时就会造成内存泄漏。

死信队列出现的原因?

1、消息被消费者拒绝,并且没有重新入队

2、消息过期

3、由于队列达到最大长度,队首的消息被丢弃(队列满了之后,如果继续往队列中发送消息,那么队首的消息就会成为死信)

延时队列

延迟队列存储的消息一般都是延时消息,所谓延时消息是指当消息被发送以后,并不想让消费者立即消费消息,而是等待指定时间后,才允许消费者来消费这条消息;

应用场景:

如果下单后30分钟未支付,实现订单自动取消

注册了某个网站,24小时没有登录,可以发送短信通知

使用死信队列实现延迟队列功能

  1. 固定延迟时间的消息,为队列上的消息设置过期时间即可

  2. 不固定延迟时间的消息,需要在发送消息时设置消息的过期时间

    注意:过期时间短的消息的不一定先被消费

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/907631
推荐阅读
相关标签
  

闽ICP备14008679号