简单说说消息中间件RabbitMQ(上)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qsbbl/article/details/82941986
MQ和RabbitMQ

MQ,消息队列,消息以管道的方式进行传递。其就像个“快递员”,将消息从生产者送到消费者处。RabbitMQ是消息队列中的一种。
消息队列适用于异步返回执行时间长,且消息发送者不多关注执行结果的情形。

中间件—消息中间件—RabbitMQ

在这里插入图片描述
中间件是将具体业务和底层逻辑解耦的软件,分为:MOM(消息中间件)、RPC(远程过程调用中间件)、UDA(数据访问中间件)、TPM(交易中间件)等。
消息中间件,又称为消息队列、消息队列中间件,分为RabbitMQ、ActiveMQ、Kafka等。

原理解析

在这里插入图片描述
各部分的名字和作用?
1.Brocker:消息队列服务器实体,Rabbitmq可以作为一个选择。
2.Exchange:消息交换机,用于接收、分配消息。指定消息按什么规则,路由到哪个队列。
3.Queue:消息队列,用于存储生产者的消息。每个消息都会被投入到一个或者多个队列里。
4.Binding Key:绑定关键字,用于把交换器的消息绑定到队列中,它的作用是把exchange和queue按照路由规则binding起来。
5.Routing Key:路由关键字,用于把生产者的数据分配到交换器上。exchange根据这个关键字进行消息投递。
6.Vhost:虚拟主机,一个broker里可以开设多个vhost,用作不用用户的权限分离。
7.Producer:消息生产者,就是投递消息的程序。
8.Consumer:消息消费者,就是接受消息的程序。
9.Channel:信道,消息推送使用的通道。可建立多个channel,每个channel代表一个会话任务。

使用流程?
1.消息接收客户端连接到消息队列服务器,打开一个channel。
2.客户端声明一个exchange,并设置相关属性。
3.客户端声明一个queue,并设置相关属性。
4.客户端使用routing key,在exchange和queue之间建立好绑定关系。
5.消息发布客户端投递消息到exchange。
6.exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。
总结起来就是:生产者发送一条消息给交换机——交换机根据关键字匹配到对应的队列——将消息存入队列——消费者从队列中取出消息使用。

why?

我们的项目为什么要选择RabbitMQ,而不选择别的消息中间件?
1.除了Qpid,RabbitMQ是唯一一个实现了AMQP标准的消息服务器;
2.可靠性,RabbitMQ的持久化支持,保证了消息的稳定性;
3.高并发,RabbitMQ使用了Erlang开发语言,Erlang是为电话交换机开发的语言,天生自带高并发光环,和高可用特性;
4.集群部署简单,正是因为Erlang使得RabbitMQ集群部署变的超级简单;
5.社区活跃度高,根据网上资料来看,RabbitMQ也是首选;

5种队列模型

在官网中有明确的说明:http://www.rabbitmq.com/getstarted.html
1.简单队列模式:一个生产者对应一个消费者。
在这里插入图片描述

2.工作队列模式:一个生产者产生的消息可以供多个消费者消费,但是一个消息只能被其中一个消费者消费。
在这里插入图片描述

3.发布/订阅模式:多了一个交换机,生产者将消息发送到交换机上,交换机发送消息给各个队列,此时,一个消息可以被多个消费者获取。
值得一提的是,这又叫广播模式,是最常用的模式了,在ITOO中使用的就是这种模式。
在这里插入图片描述

4.路由模式:又多了一个routing key,生产者发送消息带有routingkey,消费者选择自己需要的消息进行消费,也配置一个routing key。
在这里插入图片描述

5.主题模式:又多了一个通配符,这样消费端如果需要好几种消息的时候,不用一个一个的设置,直接用通配符可以接收自己想要的各种消息。
在这里插入图片描述

6.RPC:c对s说“我这有个任务需要你的帮助”,s处理完后,将结果返回给c。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qsbbl/article/details/82941986
今日推荐