一、rabbitmq是什么
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法,举例:微信用户A给微信用户B发送一条消息需要通过腾讯的服务器转发,那么这个腾讯服务器就是充当了MQ的角色。
二、rebbitmq使用场景
高并发下操作某一张数据表(订单表),数据库的压力很大,这时候就需要将所有的订单信息形式存放到Mq里,并直接返回用户端“下单成功”。然后消费者那边的mysq只能操作完一条数据才能执行下一条数据,从而减轻压力(为什么会减轻压力,这因为消费者那边的业务处理逻辑放在了一个for循环里,也就是说for只有一个循环走完才能执行下一个循环,也就是把这个阻塞的过程由业务服务承担,而不是mysql服务)。
用户注册后,需要发注册邮件和注册短信。将注册信息写入数据库成功后,异步发送注册邮件到MQ里的同时,异步发送注册短信到MQ里。然后消费者分别处理自己对应的逻辑。
异步写日志:处理逻辑同上。
三、rebbitmq组件说明
RabbitMQ Server:他的角色就是维护一条从Producer到Consumer的路线,保证数据能够按照指定的方式进行传输。
Producer:生产者,数据的发送方。
Consumer:消费者,数据的接收方。
queue:消息队列
Connection: 就是一个TCP的连接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的。以后我们可以看到程序的起始处就是建立这个TCP连接。
Channels: 虚拟连接,它建立在上述的TCP连接中。数据流动都是在Channel中进行的。也就是说,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel。
为什么使用channel:建立和关闭TCP连接是有代价的,频繁的建立关闭TCP连接对于系统的性能有很大的影响,而且TCP的连接数也有限制,这也限制了系统处理高并发的能力,所以channel可以将不同的TCP进行复用。
使用ack确认Message的正确传递:默认情况下,如果Message 已经被某个Consumer正确的接收到了,那么该Message就会被从queue中移除。当然也可以让同一个Message发送到很多的Consumer。管理消息是否被接收,从而进行是否清除消息。
Exchanges:从架构图可以看出,Procuder的Message进入了Exchange。接着通过“routing keys”, RabbitMQ会找到应该把这个Message放到哪个queue里。queue也是通过这个routing keys来做的绑定。如果 routing key 匹配, 那么Message就会被传递到相应的queue中。其实在queue创建时,它会自动的以queue的名字作为routing key来绑定那个exchange。
Virtual hosts:每个virtual host本质上都是一个RabbitMQ Server,拥有它自己的queue,exchagne,和bings rule等等。这保证了你可以在多个不同的application中使用RabbitMQ,类似不同的Mysql数据库。
RabbitMQ介绍
最新推荐文章于 2024-08-16 19:55:25 发布