RabbitMQ(每秒处理几万到几十万的消息)

1.优点

路由规则灵活,可自行根据配置的路由规则,生产者发送的消息可以发送到不同的队列中

2.缺点

如果有大量消息堆积在队列中,性能会急剧下降

RabbitMQ的性能在Kafka和RocketMQ中是最差的,每秒处理几万到几十万的消息。如果应 用要求高的性能,不要选择RabbitMQ

3.RabbitMQ的核心组件是什么?分别有什么作用?

  • Producer 消息生产者,负责产生并发送消息到RabbitMQ中。
  • Exchange消息交换机,负责接收Producer发送的消息,并根据一定的路由规则将消息转发给对应的队列或多个队列。
  • Queue消息队列,用于存储Exchange转发过来的消息。
  • Binding绑定,用于将Exchange和Queue之间建立关联关系,以便消息能够正确地转发到目标队列。
  • Consumer消息消费者,用于从队列中获取并消费消息。
  • Connection连接,表示Producer、Consumer和RabbitMQ之间的TCP连接。
  • Channel信道,表示在Connection上创建的一个虚拟连接,用于进行消息传递和交互、

4.RabbitMQ支持哪些消息模式,例如点对点和发布/订阅?

  • 点对点模式(Point-to-Point): 也称为队列模式,消息生产者将消息发送到一个队列中,消息消费者从该队列中接收消息。该模式下,一个消息只能被一个消费者消费。
  • 发布/订阅模式(Publish/Subscribe): 也称为广播模式,消息生产者将消息发送到一个交换机(Exchange)中,交换机将消息转发到多个队列中,每个队列都有一个消费者进行消费。该模式下,一个消息可以被多个消费者消费。
  • 路由模式(Routing): 消息生产者将消息发送到一个交换机中,并指定一个路由键(Routing Key),交换机将消息转发到匹配路由键的队列中,队列中的消费者进行消费。该模式下,一个消息可以被多个消费者消费,但是每个消费者只能消费与其绑定的队列中的消息。
  • 主题模式(Topics): 也称为通配符模式,消息生产者将消息发送到一个交换机中,并指定一个通配符的路由键(Topic),交换机将消息转发到与之匹配的队列中,队列中的消费者进行消费。该模式下,一个消息可以被多个消费者消费,消费者可以使用通配符的方式进行匹配。

5.四种交换器类型Fanout,direct,topic,headers

Fanout

会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中(一人一堆)

Direct

会把消息路由到那些BindingKeyRoutingKey完全匹配的队列中(一人一个)

Topic

是将消息路由到BindingKeyRoutingKey相(模糊匹配)匹配的队列中(按照主题归类)

Headers

根据headers属性匹配

6.RabbitMQ如何实现消息的可靠传递?

  • 消息确认机制: RabbitMQ支持消息生产者在发送消息后等待RabbitMQ的确认回复,如果RabbitMQ成功接收到消息,则会发送一条确认回复给生产者,生产者才会认为消息已经成功发送。如果RabbitMQ未能接收到消息,则会发送一条Nack(Negative Acknowledgement)回复给生产者,生产者需要重新发送该消息。
  • 消息持久化机制: RabbitMQ可以将消息持久化到磁盘上,以防止在RabbitMQ宕机或重启后丢失消息。通过设置Exchange和Queue的durable属性为true,以及消息的deliveryMode属性为2,可以将消息持久化到磁盘上。
  • 冗余备份机制: RabbitMQ支持将消息同时发送到多个Queue上,以提高消息的可靠性。通过设置Exchange和Queue的属性为mirrored,可以将消息发送到多个Queue上进行备份。
  • 队列优先级机制: RabbitMQ支持队列的优先级设置,可以为不同的消息设置不同的优先级,以确保高优先级的消息先被消费。
  • 消息重新投递机制: RabbitMQ支持消息重新投递机制,当消费者消费消息失败时,可以将消息重新投递给队列或转发到死信队列中。
  • 消息唯一标识符: RabbitMQ可以为每条消息生成一个唯一的ID,以避免重复发送消息。消息生产者在发送消息时,可以为消息设置一个唯一的ID,消息消费者在接收消息时,可以根据消息ID判断该消息是否已经被消费过。
  • TTL(Time-To-Live)机制: RabbitMQ支持为消息设置TTL,即消息的生存时间,如果消息在指定时间内未被消费,则会被RabbitMQ自动删除。通过设置消息的expiration属性,可以为消息设置TTL。

7.RabbitMQ如何保证消息的安全性和保密性?

  • 消息传输加密: 可以通过 SSL/TLS 加密消息传输。RabbitMQ 提供了支持 SSL/TLS 的插件,可以启用加密传输功能。
  • 访问控制: RabbitMQ 提供了基于角色的访问控制机制,可以限制用户对 Exchange、Queue 和 Virtual Host 的访问权限。可以通过配置用户、角色和权限来实现细粒度的访问控制。
  • 消息加密: 如果需要对消息内容进行加密,可以在应用程序中对消息内容进行加密,然后将加密后的消息发送到 RabbitMQ。可以使用对称加密或非对称加密等算法进行消息加密。
  • 消息签名: 可以使用数字签名来验证消息的完整性和来源。可以在消息发布者端对消息进行数字签名,然后在消息接收者端验证签名来确保消息的完整性和来源

8.RabbitMQ如何处理消息的优先级和延迟发送?

  • 消息优先级

可以使用 RabbitMQ 的插件 rabbitmq_priority_queue 来支持消息优先级。使用该插件后,可以在创建队列时指定最大优先级,然后在发送消息时设置消息的优先级。具有更高优先级的消息会被先处理。延迟发送

该插件允许创建一个延迟交换机,将消息发送到该交换机后,再由交换机延迟转发到目标队列。

9.消息顺序传递

单一队列顺序消费

可以将所有消息发送到同一个队列中,并确保队列中只有一个消费者。在消费消息时,消费者必须先确认之前的消息才能继续处理后续的消息。这样可以确保消息按照顺序被处理。

多个队列顺序消费

可以将不同顺序的消息分别发送到不同的队列中,并创建多个消费者,每个消费者只消费其中一个队列中的消息。在消费消息时,消费者必须先确认之前的消息才能继续处理后续的消息。这样可以确保每个队列中的消息按照顺序被处理,从而实现整体上的顺序消费。

10.RabbitMQ如何支持流控和拥塞控制?

1.消费者端流控

RabbitMQ 允许消费者通过 Basic.Qos 方法来限制它们从队列中获取的消息数量。消费者可以指定 prefetchCount 参数,以便告诉 RabbitMQ 每次只能发送多少条消息给它。当消费者处理完这些消息后,它会发送一个确认信号给 RabbitMQ,告诉 RabbitMQ 可以再次发送消息给它。这种机制可以限制消费者在处理消息时的速度,从而避免队列的积压。

2.生产者端流控

RabbitMQ 允许生产者通过 Connection.Tune 方法来限制它们向 RabbitMQ 发送消息的速率。生产者可以指定 channelMax 参数和 frameMax 参数,以便告诉 RabbitMQ 每个连接最多可以创建多少个通道和每个 AMQP 框架的最大大小。这种机制可以限制生产者向 RabbitMQ 发送消息的速度,从而避免队列的积压。

11.RabbitMQ数据存储

消息:消息头,消息体,属性

持久化消息:信息在到达队列时写入磁盘,同时会内存中保存一份备份,当内存吃紧时,消息从内存中清除。这会提高一定的性能。

非持久化消息一般只存于内存中,当内存压力大时数据刷盘处理,以节省内存空间(当内存不足时,会写入磁盘)

存储层:队列索引+消息存储

队列索引(index): 索引维护队列的落盘消息的信息,如存储地点、是否已被给消费者接收、是否已被消费者ack等。 每个队列都有相对应的索引。

消息存储(store):消息以键值对的形式存储到文件中,一个虚拟主机上的所有队列使用同一块存储,每个节点只有一个。存储分为持久化存储和短暂存储。持久化存储的内容在broker重启后不会丢失,短暂存储的内容在broker重启后丢失

如果消息小于这个值(4096B),就在索引中存储,如果消息大于这个值就在store中存储

12.消息可靠性

分布式锁

ack确认机制:

发送端(RabbitMQ发送确认收到)消费者(消费者发送确认收到)

持久化存储机制

限流机制

消息幂等性(重复操作与一次操作结果一致)

13.TTL(设置信息过期)

  •  如果不设置TTL,则表示此消息不会过期;

如果TTL设置为0,则表示除非此时可以直接将消息投递到消费者,否则该消息会被立即丢 弃;

14.死信队列

  • 死信消息被拒绝(Basic.Reject/Basic.Nack),并且设置requeue参数为false \
  •  消息过期;
  • 队列达到最大长度。

15.延迟队列(设定时间轮询机制)

延迟消息是指的消息发送出去后并不想立即就被消费,而是需要等(指定的)一段时间后才触发消 费。

信息先放到延时交换机上,时间到了再发送到消息队列

16.RabbitMQ的主要特性和优点是什么?

支持多种消息协议:RabbitMQ支持多种消息传递协议,包括AMQP、MQTT和STOMP等。

可靠性高: RabbitMQ具有可靠的消息传递机制,保证消息的可靠性和稳定性。

可扩展性强: RabbitMQ可以通过集群部署和负载均衡来提高系统的扩展性和可靠性。

灵活性强: RabbitMQ提供了多种消息传递模式,如点对点、发布订阅、RPC等,使得应用可以选择适合自己的消息传递方式。

安全性高: RabbitMQ提供了多种安全措施,如TLS/SSL加密、访问控制等,保证消息传递的安全性。

17.集群方案(Rabbit的分布式架构模式)

  • 主备模式:主机崩时,备机上位,主机恢复为备机(借助HAProxy)同一时刻有一台设备闲置(共享存储)
  • Shovel铲子模式:shovel铲子插件,用于数据恢复备份,两台设备各自存储,信息发送到G时,shovel插件会将信息拉取到C中存储
  • Rabbit集群:所有节点都会备份所有元数据,但存储的数据不同(有丢失信息风险)
  • 镜像队列模式:所有请求都在master上

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值