RabbitMQ—从入门到入土

什么是消息队列

消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。y

简单点说:消息队列是应用程序和应用程序之间的通信方法。当我们将大项目拆分为许多许多小模块时,我们在这些模块中需要通信时,利用传统的做法就是通过网络调用,这种做法在遇到高并发网络异常的情况下,所带来的情况便是响应时间的变长,及可能带来服务的失败。
这时我们就要使用上消息队列了。我们可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量

消息队列的好处

解耦

消息队列相当于一个中介,生产方通过j消息队列与消费方交互,消息队列将生产者和消费者的依赖关系分离开,实现了解耦合,消费方无须关心生存方一方的的业务,只需得到相应的通知,然后就会去做对应的事,这样各个模块之间就解耦了。

异步处理

将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。当我们去执行一段业务时,我们需要通过网络调用另一段与主线业务无关的业务时,我们可以利用消息队列,将这一段业务交给消息队列去执行,我们只需执行完主线业务然后返回结果即可。
举个例子:当我们需要执行【注册业务】时,我们需要执行【发短信业务】,可【发短信业务】所带来的时间,是非常非常久的,这时,我们便可以将【发短信业务】放在消息队列中,从而不会拖慢【注册业务】的时间。

削峰/限流

让消息不直接到达服务器,先让消息队列保存这些数据,减少同一时刻对服务器的压力。当同一时刻的请求激增时,我们可以将生产者的请求存储在消息队列中,限制消费方消费消息的速度,这样一来,当出现请求高峰期的时候,不至于将服务器压垮,这种我们就叫削峰
举个例子:【订单系统】当高峰期所达到的高并发足以压垮服务器时,我们可以将下单的请求存到消息队列中,限制服务器的请求量。

消息队列的实现方式

JMS

Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
JMS在特定的API接口层面和实现行为上进行了统一。

AMQP

高级消息队列协议即Advanced Message Queuing Protocol(AMQP)是面向消息中间件提供的开放的应用层协议。AMQP规范了消息传递方和接收方的行为,以使消息在不同的提供商之间实现互操作性,就像SMTP,HTTP,FTP等协议可以创建交互系统一样。高级消息队列协议关注于各种消息如何以字节流的形式进行传递。因此,使用了符合协议实现的任意应用程序之间可以保持对消息的创建、传递。

简单点说:JMS定义接口来实现,AMQP通过协议实现,AMQP可以通过网络来传递,因此AMQP是跨语言的

消息队列产品

ActiveMQ

ZMQ:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值