当初我学RabbitMQ的时候,第一时间就上GitHub找相应的教程,但是令我很失望的是没有找到,Spring,Mybatis之类的教程很多,而RabbitMQ的教程几乎找不到,看的最多的就是朱小厮大佬的博客。后来想着索性自己总结一下吧,有不恰当的地方欢迎小伙伴指出。
这篇文章主要是对着我在GitHub上的源码解释的,因此本文并没有太多的源码。写了挺长时间的,为了防止迷路,欢迎大家star和fork
github地址:https://github.com/erlieStar/rabbitmq-examples
前言
我们先来看一下一条消息在RabbitMQ中的流转过程
图示的主要流程如下
生产者发送消息的时候指定RoutingKey,然后消息被发送到Exchange
Exchange根据一些列规则将消息路由到指定的队列中
消费者从队列中消费消息
整个流程主要就4个参与者message,exchange,queue,consumer,我们就来认识一下这4个参与者
Message
消息可以设置一些列属性,每种属性的作用可以参考《深入RabbitMQ》一书
属性名 | 用处 |
---|---|
contentType | 消息体的MIME类型,如application/json |
contentEncoding | 消息的编码类型,如是否压缩 |
messageId | 消息的唯一性标识,由应用进行设置 |
timestamp | 消息的创建时刻,整型,精确到秒 |
deliveryMode | 消息的持久化类型 ,1为非持久化,2为持久化,性能影响巨大 |
headers | 键/值对表,用户自定义任意的键和值 |
priority | 指定队列中消息的优先级 |
Exchange
接收消息,并根据路由键转发消息到所绑定的队列,常用的属性如下
交换机属性 | 类型 |
---|---|
name | 交换器名称 |
type | 交换器类型,有如下四种,direct,topic,fanout,headers |
durability | 是否需要持久化,true为持久化。持久化可以将交换器存盘,在服务器重启的时候不会丢失相关信息 |
autoDelete | 与这个Exchange绑定的Queue或Exchange都与此解绑时,会删除本交换器 |
internal | 设置是否内置,true为内置。如果是内置交换器,客户端无法发送消息到这个交换器中,只能通过交换器路由到交换器这种方式 |
argument | 其他一些结构化参数 |
我们最常使用的就是type属性,下面就详细解释type属性