![97ff6d00ae74a164f7c024878e7bce8b.png](https://i-blog.csdnimg.cn/blog_migrate/e3367dac0228e17e62de951d73a21df3.jpeg)
当初我学RabbitMQ的时候,第一时间就上GitHub找相应的教程,但是令我很失望的是没有找到,Spring,Mybatis之类的教程很多,而RabbitMQ的教程几乎找不到,看的最多的就是朱小厮大佬的博客。后来想着索性自己总结一下吧,有不恰当的地方欢迎小伙伴指出。
这篇文章主要是对着我在GitHub上的源码解释的,因此本文并没有太多的源码。写了挺长时间的,为了防止迷路,欢迎大家star和fork
![18c04a212a6a5495b2360e5ad8215243.png](https://i-blog.csdnimg.cn/blog_migrate/404f9f22aaf97edc83aaa21fd85768f9.png)
github地址:https://github.com/erlieStar/rabbitmq-examples
![4d69251c3814169fb4f3e263fbf72d1c.png](https://i-blog.csdnimg.cn/blog_migrate/e454272aad7101bc3a66b7ee31147479.jpeg)
前言
我们先来看一下一条消息在RabbitMQ中的流转过程
![fb9715a2f3daa49c1f3a45d816d898fb.png](https://i-blog.csdnimg.cn/blog_migrate/151e13d18384823cfe22c7a8d951cbfd.jpeg)
图示的主要流程如下
生产者发送消息的时候指定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属性
![de423b9c390efef20f1d0d344302a2a4.png](https://i-blog.csdnimg.cn/blog_migrate/9aa022d9f30fda9a27cb126522c15a19.jpeg)