美文网首页
RabbitMQ系列(八):Headers

RabbitMQ系列(八):Headers

作者: 初级赛亚人 | 来源:发表于2017-10-07 18:26 被阅读0次

    前面讲过fanout,direct,topic exchange的使用,还有一个headers类型的exchange未提到如何使用它,现在我们就来看看header exchange该如何使用以及在哪些场景下使用这种类型的exchange。

    Headers

    headers exchange主要通过发送的request message中的header进行匹配,其中匹配规则(x-match)又分为all和any,all代表必须所有的键值对匹配,any代表只要有一个键值对匹配即可。headers exchange的默认匹配规则(x-match)是any。

    sender.go

    声明exchange

    发送message

    辅助函数bodyFrom()

    receiver.go

    同样的声明exchange(略)

    声明queue以及binding queue

    注意之前我们的QueueBind时args这个参数都是nil,现在就需要用到这个参数进行bind。这里receiver.go中的Channel.QueueBind()表达的意思是对于发送过来的消息,只要和table["user"]="lyx"或者table["name"]="hei"任意一个键值对匹配就会被接收。如果x-match为all,那么必须满足table["user"]="lyx"和table["name"]="hei"两个键值对都匹配时才会被接收(尽管受到的message中的header数量可能大于2个,但是只要其中任意2个和table中的值完全相等就会匹配成功)。

    从queue的一个channel中接收消息

    producer.go

    consumer.go

    现在我们将receiver.go中的table做一些修改:

    将x-match从any修改为all,重新编译运行,然后在producer那里发送一条消息,会发现consumer接收不了这条消息,是因为producer那里的headers里面没有包含name-hei这个键值对。所以不匹配导致consumer这边没收到任何消息。

    相关文章

      网友评论

          本文标题:RabbitMQ系列(八):Headers

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