RabbitMQ常用的Exchange Type有三种:fanout、direct、topic。

  • fanout:把所有发送到该Exchange的消息投递到所有与它绑定的队列中,广播。

    • Publish/Subscribe模式中,需要指定exchange type为fanout,一条消息会被所有的消费者消费。

  • direct:把消息投递到那些binding key与routing key完全匹配的队列中。

    • Routing模式中,指定exchange type为direct,同时需要指定routing key好指定路由到哪个队列上。

  • topic:将消息路由到binding key与routing key模式匹配的队列中。

    • Topics模式中,在Routing基础上,将routing key可以设置为模糊匹配的模式。*可以匹配任一个单词,

特性:

  • RabbitMQ支持消息确认,RabbitMQ收到消息回执(Message acknowledgment)后才将该消息从Queue中移除;如果RabbitMQ没有收到回执并检测到消费者的RabbitMQ连接断开,则RabbitMQ会将该消息发送给其他消费者(如果存在多个消费者)进行处理。

  • RabbitMQ支持消息持久化,可以将Queue与Message都设置为可持久化的(durable),这样可以保证绝大部分情况下我们的RabbitMQ消息不会丢失。但依然解决不了小概率丢失事件的发生(可以通过事务解决)。

  • RabbitMQ支持RPC。