RabbitMQ消息队列的原理和实践

本文深入探讨了消息队列MQ的基本概念,对比了RabbitMQ、Kafka和RocketMQ,并详细介绍了RabbitMQ的核心组件和通信模型。讨论了RabbitMQ确保消息可靠传递的策略,包括消息丢失的预防措施以及如何保持消息消费的顺序性。最后提到了RabbitMQ的代码实现流程。
摘要由CSDN通过智能技术生成

本文首先会介绍消息队列(MQ)的基本概念,也会对比目前业界常见的MQ区别,之后会介绍RabbitMQ的核心概念和其实用。

一、消息队列(MQ)介绍和对比

消息队列主要用来在不同系统之间进行消息传递,他是服务间进行异步通信的一种常见方式,RabbitMQ作为一种常见的消息中间件,经常被用在处理异步消息、进行系统间解耦、进行大流量的削峰填谷的作用。

但引入消息中间件同时也会带来一些坏处,那就是增加了系统的复杂性,如果消息中间件不可用,可能就会导致整个系统的不可用,这样就降低了系统的可用性,同时由于RabbitMQ的本身的特性,他在面对消息传递过大的时候,会造成消息积压的问题,这些都是在生产环境使用RabbitMQ需要考虑的问题。

下面是对比业界常用的3种MQ:

优点 缺点 使用场景
kafka 吞吐量非常大, 性能非常好, 集群高可用。 会丢数据, 功能比较单一。 日志分析 , 大数据采集
RabbitMQ 消息可靠性高, 功能全面。 吞吐量比较低, 消息积累会影响性能, erlang语言不好定制。 小规模场景
RocketMQ 高吞吐,高性能,高可用, 功能全面。 开源版功能不如云上版, 官方文档比较简单, 客户端只支持java。 几乎全场景

总的来说,kafka在常见MQ中性能最高,但是存在数据丢失的问题,所以一般用在日志采集中;RabbitMQ的可靠性最高、功能最全面,但是其存在消息积压的问题,所以一般用在需要保障消息不丢失的小规模场景中;RocketMQ汲取了kafka和RabbitMQ的长处,权衡了性能和可靠性,所以适用大多数场景。

二、RabbitMQ基本概念

以下是RabbitMQ的通信模型,总的来说这是一种生产者/消费者的通信模型,生产者和RabbitMQ通过Connection建立连接后,生产者将消息发送给RabbitMQ,消息会直接投递到Exchange,Exchange根据路由信息再转发到对应的Queue中,下游如果关联了消费者,就会直接推送给消费者。

  1. Message 消息:消息是不具名的,它由消息头header和消息体payload组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。
  2. Producer消息生产者:也是一个向交换器Exchange发布消息的客户端应用程序。
  3. Exchange 交换器:用来接收生产者发送的消息并将这些消息路由给服务器中的队列Queue。
  4. Binding 绑定:用于消息队列Queue和交换器Exchange之间的关联。一个绑定就是基于Routing key将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。
  5. Queue 消息队列:用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。
  6. Connection 网络连接:一般是一个TCP连接。
  7. Channel 信道:多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内地虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值