RabbitMQ:从入门到搞定面试官

使用docker安装,注意要安装tag后缀为management的镜像(包含web管理插件),我这里使用的是rabbitmq:3.8-management

1、 拉取镜像

shell docker pull rabbitmq:3.8-management

¨G0G

shell
docker run --name rabbitmq --hostname rabbitmq -d -p 15672:15672 -p 5672:5672 rabbitmq:3.8-management

3、 访问web管理页面

:15672/

概念介绍 组件概念

Broker:简单来说就是消息队列服务器实体。

Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。

Queue:消息队列载体,每个消息都会被投入到一个或多个队列。

Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。

Routing Key:路由关键字,exchange根据这个关键字进行消息投递。

vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。

producer:消息生产者,就是投递消息的程序。

consumer:消息消费者,就是接受消息的程序。

channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

6种消息模式和4种交换机

消息模式:

Simple Work Queue (简单工作队列):也就是常说的点对点模式,一条消息由一个消费者进行消费。(当有多个消费者时,默认使用轮训机制把消息分配给消费者)。

Work Queues (工作队列):也叫公平队列,能者多劳的消息队列模型。队列必须接收到来自消费者的手动ack才可以继续往消费者发送消息。

Publish/Subscribe (发布订阅模式):一条消息被多个消费者消费。

Routing(路由模式):有选择的接收消息。

Topics (主题模式):通过一定的规则来选择性的接收消息

RPC 模式:发布者发布消息,并且通过 RPC 方式等待结果。目前这个应该场景少,而且代码也较为复杂,本章不做细讲。

交换机类型:

direct(直连交换机):将队列绑定到交换机,消息的 routeKey 需要与队列绑定的 routeKey 相同。

fanout (扇形交换机):不处理 routeKey ,直接把消息转发到与其绑定的所有队列中。

topic(主题交换机):根据一定的规则,根据 routeKey 把消息转发到符合规则的队列中,其中#用于匹配符合一个或者多个词(范围更广), * 用于匹配一个词。

headers (头部交换机):根据消息的 headers 转发消息而不是根据 routeKey 来转发消息, 其中 header 是一个 Map,也就意味着不仅可以匹配字符串类型,也可以匹配其他类型数据。规则可以分为所有键值对匹配或者单一键值对匹配。

消息模式和交换机的对应关系如下:

2021-10-20-11-17-31

2021-10-20-11-17-31消费模式

消费模式分为推模式(Basic Consume)和拉模式(channel basicGet)

代码demo

了解完上述概念后,还是要用代码实践一下,以加深自己的理解。幸运的是rabbitmq官方提供了完整的代码demo,并且包含多种语言版本。
所以可以直接下载官方示例学习:

https://github.com/rabbitmq/rabbitmq-tutorials

比如下面是python代码中的hello world例子

20211025142123

20211025142123进阶 备份交换器

生产者在发送消息的时候如果不设置 mandatory 参数 那么消息在未被路由的情况下将会丢失,如果设置了 mandatory 参数,那么需要添加 ReturnListener 的编程逻辑,生产者的代码将变得复杂。如果既不想复杂化生产者的编程逻辑,又不想消息丢失,那么可以使用备份交换器,这样可以将未被路由的消息存储在 RabbitMQ 中,再在需要的时候去处理这些消息。

消息过期时间

目前有两种方式设置消息的过期时间,一是通过队列属性设置,二是通过消息单独设置。如果两种方式同时使用,以最小值为准。

队列过期时间

通过 channel queueDeclare 方法中的 expires 参数可以控制队列被自动删除前处于未使用状态的时间。未使用的意思是队列上没有任何的消费者,队列也没有被重新声明,并
且在过期时间段内也未调用过Basic Get命令。

死信队列(DLX)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzgwd.html