Rabbit简介
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现,是现在市面上应用比较广泛的消息队列中间件。它包含通用的两种消息转发模式,一是点对点,二是广播。
AMQP中的消息路由
AMQP中的消息的路由过程和JMS有一些差别,AMQP中增加了Exchange和Binding的角色。具体流程如下,首先生产者(Producer)将消息发布到交换器(Exchange)上,由交换器(Exchange)根据路由规则决定将消息派发到哪一个消息队列(Queue)中,最后由消费者(Consumer)从队列(Queue)中获取所需要的消息。
Exchange的四种类型
Exchange分发消息时根据类型的不同,分发策略有区别,目前共有四种类型:direct、fanout、topic、headers。headers类型的交换器和direct完全一致,但性能差很多,目前几乎用不到。
Direct Exchange
这是一种完全匹配、单播的模式,Exchange根据消息携带的routing key与队列进行匹配,只有完全匹配上的才会对该队列发送消息,因此这是一种单播的模式。
Fanout Exchange
这种模式的交换器会对所有队列进行消息广播,即每个队列都能获得Exchange发送过来的消息,因此fanout类型的Exchange转发消息是最快的。
Topic Exchange
topic交换器通过模式匹配进行分配消息,只要符合匹配的规则,该消息就会去往相对应的一个或者多个队列。符号”#”匹配0个或者多个单词,符号”*”匹配一个单词。