RabbitMQ

路由(Exchange)

Direct

Direct类型exchange的路由算法是很简单的:要想一个消息能到达这个队列,需要binding key和routing key正好能匹配得上。

Headers

通过添加属性key-value匹配

Fanout

将消息分发到所有的绑定队列,无routingkey的概念

Topic

topic类型的exchange上时不能随意指定routing_key(一定是指由一系列由点号连接单词的字符串,单词可以是任意的,但一般都会与消息或多或少的有些关联)。 Routing key的长度不能超过255个字节。

  • *(星号):可以(只能)匹配一个单词
  • #(井号):可以匹配多个单词(或者零个)
  • 实例:

    生产者端路由 消费者端路由 是否收到消息
    * N
    .. #.* Y
    #.test.t #.* Y
    test.ab-1 test.#-1 N
    test.#-1 test.#-1 Y
    test.test.-1 test.#-1 N
    test.ab-1 test.*-1 N
    test.a-1 test.*-1 N
    test.*-1 test.*-1 N

当一个队列被绑定为binding key为”#”时,它将会接收所有的消息,此时和fanout类型的exchange很像。 当binding key不包含”*”和”#”时,这时候就很像direct类型的exchange