绑定(bindings)
前面几个小节已经学会了如何实现exchange与queue的绑定。可以简单的理解为:queue对来自exchange的message感兴趣。
binding需要一个额外的参数routing_key.为了避免与Channel.Publish里面的参数冲突,在这里称为binding key。
如何创建一个routing_key
err = ch.QueueBind(
q.Name, // queue name
"black", // routing key
"logs", // exchange
false,
nil)
binding key 的意思取决于依赖的exchange类型。
fanout exchange:会忽略掉binding key的值。fanout exchange只会盲目广播。
direct exchange: 背后的路由算法很简单:message传递到binding key与routing key完全匹配的queue里面。
在上图我们可以看到,exchange x 有两个queue与之绑定。
第一个queue与binding key:orange绑定,第二个queue与blank和green这两个binding key绑定。
当一个message发布到与orange绑定的exchange时,就会被路由到Q1.同理,当message发布到与blank和green绑定的queue时,就会被路由到Q2.
多重绑定(multiple bindings)
在上图,black与Q1和Q2都绑定,那么此时的direct exchange扮演者与fanout 一样的功能:有black这个binding key的message将会路由到与black绑定的所有queue。