美文网首页Docker容器读书程序员
Spring Boot RabbitMQ 四种交换器 fanou

Spring Boot RabbitMQ 四种交换器 fanou

作者: Anoyi | 来源:发表于2019-04-12 17:47 被阅读84次

    🏷 RabbitMQ 交换器

    1、fanout exchange

    发送到该交换器的所有消息,会被路由到其绑定的所有队列。

    如图所示,所有发送到 fanout exchange 的消息都会路由到 QUEUE-1QUEUE-2

    2、direct exchange

    发送到该交换器的消息,会通过路由键完全匹配,匹配成功就会路由到指定队列

    如图所示,发送到 direct exchange 的消息,会通过消息的 routing key 路由:

    • 如果 routing key 值为 queue.direct.key1,会路由到 QUEUE-1
    • 如果 routing key 值为 queue.direct.key2,会路由到 QUEUE-2
    • 如果 routing key 值为其他,不会路由到任何队列

    3、topic exchange

    发送到该交换器的消息,会通过路由键模糊匹配,匹配成功就会路由到指定队列

    路由键通过 . 来划分为多个单词, * 匹配一个单词,# 匹配零个或多个单词

    如图所示,发送到 topic exchange 的消息,会通过消息的 routing key 模糊匹配再路由:

    • 如果 routing key 值为 queue.topic.key1,会路由到 QUEUE-1QUEUE-2
    • 如果 routing key 值为 test.topic.key2,会路由到 QUEUE-1
    • 如果 routing key 值为 queue,会路由到 QUEUE-2
    • 如果 routing key 值为 queue.hello,会路由到 QUEUE-2
    • 如果 routing key 值为 test.test.test,不会路由到任何队列

    4、header exchange

    发送到该交换器的消息,会通过消息的 header 信息匹配,匹配成功就会路由到指定队列

    消息的 header 信息是 key-value 的形式,每条消息可以包含多条 header 信息,路由规则是通过 header 信息的 key 来匹配的,Spring Boot 封装的匹配规则有三种:

    • where(key).exists() :匹配单个 key
    • whereAll(keys).exist() :同时匹配多个 key
    • whereAny(keys).exist() :匹配多个 key 中的一个或多个

    如图所示,发送到 headers exchange 的消息,会通过消息的 header 匹配:

        @Bean
        Binding bindingHeadersQueue1(Queue headersQueue1, HeadersExchange headersExchange) {
            return BindingBuilder.bind(headersQueue1).to(headersExchange).where("one").exists();
        }
    
        @Bean
        Binding bindingHeadersQueue2(Queue headersQueue1, HeadersExchange headersExchange) {
            return BindingBuilder.bind(headersQueue1).to(headersExchange).whereAll("all1", "all2").exist();
        }
    
        @Bean
        Binding bindingHeadersQueue3(Queue headersQueue3, HeadersExchange headersExchange) {
            return BindingBuilder.bind(headersQueue3).to(headersExchange).whereAny("any1", "any2").exist();
        }
    
    • 如果 header 信息存在 one=XXXX,会路由到 QUEUE-1
    • 如果 header 信息存在 all1=XXXXall2=XXXX,会路由到 QUEUE-2
    • 如果 header 信息存在 any1=XXXXany2=XXXX,会路由到 QUEUE-3

    提示:header 不能以 x- 开头,参考官方文档:https://www.rabbitmq.com/tutorials/amqp-concepts.html#exchange-headers

    🏷 示例代码

    🏷 参考资料

    相关文章

      网友评论

        本文标题:Spring Boot RabbitMQ 四种交换器 fanou

        本文链接:https://www.haomeiwen.com/subject/ihncwqtx.html