1.rabbitmq的介绍和基本使用

rabbitmq是一款消息队列。

首先什么是消息,消息是指在应用间传送的数据。消息可以是简单的字符串, 也可以是一些复杂的对象。
消息队列则是应用间进行通信的一种方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。
可以类比一下,python中的队列,也是为了不同线程之间进行数据共享,但是rabbitmq这款消息队列要远比python中的队列强大的多。

因此消息队列可以看成是应用之间的异步协助机制,至于为什么需要消息队列,可以想象在流量高峰时期,我们不可能临时增加服务器。但是又想支撑这么大的流量,因此可以使用消息队列将操作进行异步执行,比如用户下单成功发送短信,那么我们没必要非等到短信发送成功结束流程,而是把发送短信这条消息放在队列中,由另外的线程从消息队列中去取消息,然后执行发送短信的业务逻辑。

这是一个普通也是最简单但也是效果最不好的执行流程

发送邮件和短信变成异步的了,效果有提升,但仍然不是最优的办法

这种效果是最好的,因为发送短信和邮件不是必须的业务逻辑。我们可以写入一个消息队列,那么另外的线程去获取消息然后执行,可以大大的提升效率。

再比如库存系统,如果高峰时期,那么会有大量的请求访问库存系统,这样压力会很大,那么我们就可以将消息写入消息队列,直接返回用户下单成功。然后库存系统在获取消息队列里面的消息,进行下单操作。

以及专门用来处理日志的kafka也是同样的道理

日志采集客户端,负责日志数据采集,定时写受写入Kafka队列
Kafka消息队列,负责日志数据的接收,存储和转发
日志处理应用:订阅并消费kafka队列中的日志数据

看一张架构图来理解rabbitmq的基本原理

clientA和clientB可以看成是订单系统,往消息队列里面发送消息,client123可以看成是库存系统,往消息队列里面取数据

解释一下图中的一些关键词

Queue:
队列,rabbitmq的作用是存储消息,那么自然要有队列来进行存储。队列的特点是先进先出,因此可以看出clientA和clientB是生产者,生产者生产消息送到rabbitmq的内部对象Queue里面去,而client123可以看成是消费者,消费者则是从队列中取出数据,可以简化为:

猜你喜欢

转载自www.cnblogs.com/traditional/p/10223001.html