本文主要讲解 routing 和 topics 两种工做模式,其中 topics 只是在 routing 的基础上增长了一个 routingkey 的正则匹配。接下来会详细介绍。ui
以前说到的 Publish/Subscribe 是把一个消息发给多个消费者,而且每一个消费者接收到的消息是同样的。而此次说到的Routing 模式,则是经过增长一个组件(Bingings),使咱们的消费者能订阅到本身感兴趣的消息。code
Bindings 会将 exchanges 和 queue 联系在一块儿,queue 经过 bindings 从 exchangs 中订阅本身感兴趣的消息。队列
Bindings 提供了一个 RoutingKey 参数 channel.queueBind(queueName, EXCHANGE_NAME, routingkey); 其实在上一篇中,也有这个参数, 只不过这个参数是一个空字符串,由于 这个key和 exchange type是息息相关的,fanout 类型的 exchange 的key就是 空字符串。ip
direct exchange字符串
一个消息 会根据 routing key 来匹配本身应该去哪一个队列。get
Multiple bindingsit
direct exchange 也能够实现 fanout exchange 的做用,只要队列绑定相同的 routing key,一个消息一样能够发到多个队列当中基础
channel.basicPublish(EXCHANGE_NAME, routingkey, null, message.getBytes()); channel.queueBind(queueName, EXCHANGE_NAME, routingkey);
topic exchange 只是在 routing 的基础上,将routingkey 改为了相似正则匹配, routingkey 由单词 和 点 组成 ,长度限制在 255 bytechannel
例如:lazy.orange.rabbit 或者 quick.orange.fox, 除此以外, 还能够用queue
例如 :.orange.rabbit, .orange., quick.# 可是若是单词个数不匹配,也是不行的, 好比, lazy.orange.rabbit. 或者 *.orange.rabbit.other 可是 '#' 这样用是能够的, lazy.orange.rabbit.#;