RabbitMQ系列(八):Headers

前面讲过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这边没收到任何消息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容