RabbitMQ详情

一.MQ简介

什么是MQ

MQ本质是队列,FIFO先入先出,队列中存放的内容是message(消息),还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中是常见的上下游“逻辑解耦+物理解耦”的消息通信服务。
主要用来实现流量削峰,应用解耦,异步处理等系统优化方案

为什么使用MQ

  • 流量削峰:
    例如:处理订单系统中能最大处理1万次订单,但在高峰期处理2万次订单处理不过来,只能限制1万次订单后的订单不能下单。那么有消息队列做缓冲就很好的解决这个问题,将这1秒内的订单分一段时间处理,意思没能处理的放在队列中等待直到处理完,这样比不能下单体验感好。
  • 应用解耦:
    在电商系统中有订单系统,库存系统,物流系统,支付系统,如果耦合调用它们任何一个子系统出故障下单会造成异常,这时使用消息队列后,用几分钟解决完故障后,继续处理订单,客户感受不到系统的故障,提升系统的可用性。
  • 异步处理:
    有些服务间是异步的
    例如:A调用B,B花很长时间处理完,A不知道B什么时候处理完
    以前方式解决:A过一段时间去调用B的API查询,或A提供一个callback api,B执行完调用API通知A服务。
    使用消息总线后:A调用完B后,只需监听B处理完的消息,B处理完会发一条消息给MQ,MQ将此消息转发给A服务。

AMQP和JMS

MQ是消息通信的模型,并发具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。
两者间的区别和联系:
JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
JMS规定了两种消息模型;而AMQP的消息模型更加丰富

常见MQ产品

  • ActiveMQ:基于JMS
  • RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
  • RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会
  • Kafka:分布式消息系统,高吞吐量

二.RabbitMQ(消息队列)

选用RabbitMQ

在消息队列产品的选择上,我选用了RabbitMQ。估计有很多同学质疑,为什么不选择Kafka呢?这里我需要解释几句。
消息队列产品有很多,比如说常见的有RocketMQ、RabbitMQ、ActiveMQ和Kafka。其中Kafka的性能是最好的,并发量比较大,而且消息收发的速度也非常快。但是消息收发的可靠性上,Kafka不如RabbitMQ,而且技术选型的时候执行速度并不是唯一标准。比速度的话,汇编语言碾压一切高级语言,但是现在我们写程序几乎不会选用汇编语言,而是要兼顾开发效率、易用性和生态圈。RabbitMQ还有

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏日一凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值