Exchange:交换机
AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列。
生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机。先由Exchange来接收,然后Exchange按照特定的策略转发到Queue进行存储。
同理,消费者也是如此。Exchange 就类似于一个交换机,转发各个消息分发到相应的队列中。
Exchange 模式 - direct
Direct模式为RabbitMQ 默认的 Exchange模式,Directm模式特点:
1. 消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。
2.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。
Fanout模式
Fanout模式特性:
1.这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定
2.这种模式不需要RouteKey
3.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。
Topic模式
Topic模式特性:
任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上
1. 这种模式需要RouteKey,要提前绑定Exchange与Queue。
2. 如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息。
3. 在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。
4. “#”表示0个或若干个关键字,“*”表示一个关键字。如“log.*”能与“log.warn”匹配,无法与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。