带列表的RabbitMQ头交换

带列表的RabbitMQ头交换,rabbitmq,message-queue,rabbitmq-exchange,Rabbitmq,Message Queue,Rabbitmq Exchange,我在试图理解类型头交换的工作原理时遇到了一些问题 只有一个交换,myExchange 三个队列: myQueue1 myQueue2 myQueue3 绑定: myExchange=>myQueue1(x-match:any,myHeader:[test1]) myExchange=>myQueue2(x-match:any,myHeader:[test2]) myExchange=>myQueue3(x-match:any,myHeader:[test1,test2,test3]) 我希望消息

我在试图理解类型头交换的工作原理时遇到了一些问题

只有一个交换,myExchange

三个队列:

  • myQueue1
  • myQueue2
  • myQueue3
  • 绑定:

  • myExchange=>myQueue1(x-match:any,myHeader:[test1])
  • myExchange=>myQueue2(x-match:any,myHeader:[test2])
  • myExchange=>myQueue3(x-match:any,myHeader:[test1,test2,test3])
  • 我希望消息的头具有多个值;test1、test2、test3的任意组合(例如:仅test1、test1和test2、test3和test2等)

    myQueue3仅当消息具有MyHeader:[test1、test2、test3]时才接收消息。我希望myQueue3也能获取test1和test2的消息

    myQueue1仅当消息具有MyHeader:[test1]时才接收消息。我希望myQueue1也能获取test1和[test1,test2]的消息


    有没有办法达到这种行为?谢谢你

    我同意你的评论,我正在努力实现一些目前不受支持的目标。我将使用路由键。

    为此,我有一个窍门

    绑定:

    • myExchange=>myQueue1(x-match:any,test1:true)
    • myExchange=>myQueue2(x-match:any,test2:true)
    • myExchange=>myQueue3(x-match:any,test1:true,test2:true,test3:true)
    myQueue1将接收头包含{test1:true}的所有消息

    myQueue2将接收头包含{test2:true}的所有消息

    myQueue3将接收头包含以下内容之一的所有消息{test1:true}、{test2:true}或{test3:true}

    我更喜欢这样,因为路由密钥被255个字节限制,但头中元素的数量限制非常高


    就性能而言,我不知道什么是最好的。

    头交换绑定似乎不是这样工作的。在AFAIR中,它们使用严格匹配,所以如果您对某些标头具有数组值,则该数组中的项目位置很重要。也许使用带有(多个)通配符路由键绑定的常规主题交换将更好地为您服务?在您的情况下,使用路由键将有所帮助。主题交换比标题更快。