『IT实战联盟』RabbitMQ知识点,一篇搞定( 二 )


最常见的场景就是消息广播 。
注意 , 此方式是 exchange 广播给 queue , 不是 queue 广播给 consumer 。 queue 到 consumer 还是轮询的方式 。 3.3 Topic 主题
routing key 与 binding key 进行模式匹配 。 Routing key == Pattern in binding key
RabbitMQ 使用 * 和 # 这2个通配符 。
* - 匹配一个词 。
# - 匹配 0 个或多个词 。
『IT实战联盟』RabbitMQ知识点,一篇搞定
本文插图
routing key 为 logs.error 的消息 , 匹配 binding key -- logs.error 和 logs.* , 所以消息会进入 "only error" 和 "alllogs" 。
『IT实战联盟』RabbitMQ知识点,一篇搞定
本文插图
routing key 为 logs.success 的消息 , 匹配binding key -- #success 和 logs.* , 所以消息会进入 "only success" 和 "alllogs" 。
这种形式有非常多的应用场景 , 可以用于发布-订阅模式、将相关数据分发给期望的 worker 等等 。 3.4 Header
一种特殊类型的 exchange , 基于消息头中的 key 进行路由 。
使用这种方式后 , 就会忽略消息的 routing key 属性 。
对一个 header exchange 创建 binding 时 , 可以对一个 queue 绑定多个 header , 这种情况下 , 消息生产者需要告诉 RabbitMQ 匹配哪些 key , producer 可以指定一个标识 x-match , 值可以是:
any - 只有一个值应该匹配 。
all - 所有值都必须匹配 。 4. 消息确认
消息到达目的地之后 , broker 应该从队列中将其删除 , 这是为了防止消息过多导致溢出 。
删除消息之前 , broker 必须得到确认通知 。
有 2 种通知方式:
自动通知:只要 consumer 接收到消息即可 , 不管是否处理完成 。
明确显示通知:只有在 consumer 发送回来一个确认信息后才可以 , 这样保证 consumer 处理完成后再删除 。