消息队列 MQ
一、什么是MQ

二、RabbitMQ消息队列
-
概念
- channel:操作MQ的工具
- exchange:路由消息到队列中
- queue:缓存消息
- virtual host:虚拟主机,是对exchange、queue等资源的逻辑分组
-
SpringAMQP
<!--AMQP依赖,包含RabbitMQ--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>- Basic Queue 简单队列模型
![]()
- Work Queue 工作队列模型
![]()
当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。此时就可以使用 work 模型,多个消费者共同处理消息处理,速度就能大大提高了。 - 发布、订阅模型-Fanout
![]()
在广播模式下,消息发送流程是这样的:
- 可以有多个队列
- 每个队列都要绑定到 Exchange(交换机)
- 生产者发送的消息,只能发送到交换机,交换机来决定要发给哪个队列,生产者无法决定
- 交换机把消息发送给绑定过的所有队列
- 订阅队列的消费者都能拿到消息
- 发布、订阅模型-Direct
在 Direct 模型下:
- 队列与交换机的绑定,不能是任意绑定了,而是要指定一个
RoutingKey(路由key) - 消息的发送方向 Exchange发送消息时,也必须指定消息的
RoutingKey。 - Exchange 不再把消息交给每一个绑定的队列,而是根据消息的
Routing Key进行判断,只有队列的Routingkey与消息的Routing key完全一致,才会接收到消息
- 队列与交换机的绑定,不能是任意绑定了,而是要指定一个
- 发布、订阅模型-Topic
Topic与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型可以让队列在绑定Routing key的时候使用通配符!- queue1:绑定的是
china.#,因此凡是以china.开头的routing key都会被匹配到。包括 china.news 和 china.weather - queue2:绑定的是
#.news,因此凡是以.news结尾的routing key都会被匹配。包括 china.news 和 japan.news
- queue1:绑定的是
- Basic Queue 简单队列模型



浙公网安备 33010602011771号