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