RabbitMQ面试必备知识点及实战 - Exchange交换机类型详解(中)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: RabbitMQ面试必备知识点及实战 - Exchange交换机类型详解

2.2 Topic exchange

尽管使用直接交换改进了我们的系统,它仍然有局限性 - 不能做基于多个标准的路由。


比如在日志系统,可能不仅要根据严重性订阅日志,还要根据日志源订阅日志。


你可能从syslog unix工具中了解这个概念,它根据严重性(info / warn / crit …)和facility(auth / cron / kern …)来路由日志。

这更具灵活性 - 我们可能想要监听来自 cron 的关键错误以及来自 kern 的所有日志。


为了在日志记录系统中实现这一点,还需要了解更复杂的主题交换机。


*可匹配一个单词


#可匹配零或多个单词


所有发送到Topic Exchange的消息会被转发到所有关心RouteKey中指

定Topic的Queue上


Exchange将RouteKey和某Topic进行模糊匹配,此时队列需要绑定一个Topic

2.2.1 实例1

image.png

在这个例子中,我们将发送所有描述动物的消息。消息将与包含三个单词(两个点)的routing key一起发送.

routing key中的第一个单词描述速度,第二颜色,第三是物种:“。。”。


我们创建了三个绑定:Q1绑定了绑定键“* .orange.”,Q2绑定了“.*.rabbit”和“lazy.#”


这些绑定可总结为:


Q1对所有橙色动物感兴趣

Q2希望听到关于兔子的一切,以及关于懒惰动物的一切

routing key设置为“quick.orange.rabbit”的消息将传递到两个队列。消息“lazy.orange.elephant”也将同时发送给他们.

另一方面


“quick.orange.fox”只会转到第一个队列

而“lazy.brown.fox”只会转到第二个队列

“lazy.pink.rabbit”将仅传递到第二个队列一次,即使它匹配两个绑定

“quick.brown.fox”与任何绑定都不匹配,因此它将被丢弃。

如果我们违背我们的约定并发送带有一个或四个单词的消息,例如“orange” or “quick.orange.male.rabbit”,会发生什么?好吧,这些消息将不会匹配任何绑定,因此将丢失.


另一方面,“lazy.orange.male.rabbit”,虽然它有四个单词,也会匹配最后一个绑定,并将被传递到第二个队列。

实例图

image.png

image.png

实操演示

  • Pro
  • image.png
  • Con
  • image.png
  • 启动消费者:
  • image.png
  • image.png
  • 启动生产者:
  • image.png
  • 消费端收到了消息
  • 修改匹配格式,理论上只能接受前两个消息
  • image.png
  • 注意在管控台,先将之前的匹配绑定取消!
  • 3.png
  • 4.png
  • 显然仅能接受前两个消息
  • image.png
相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
14天前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
23 0
|
2月前
|
监控 Java 应用服务中间件
Spring Boot 源码面试知识点
【5月更文挑战第12天】Spring Boot 是一个强大且广泛使用的框架,旨在简化 Spring 应用程序的开发过程。深入了解 Spring Boot 的源码,有助于开发者更好地使用和定制这个框架。以下是一些关键的知识点:
60 6
|
2月前
|
Java 程序员
Java this关键字详解(3种用法),Java程序员面试必备的知识点
Java this关键字详解(3种用法),Java程序员面试必备的知识点
|
26天前
|
SQL 存储 前端开发
程序技术好文:面试知识点六:JavaWeb
程序技术好文:面试知识点六:JavaWeb
14 1
|
1月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
462 9
|
13天前
|
存储 并行计算 安全
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
20 0
|
14天前
|
Java
Java面试题:Java内存模型与并发编程知识点,解释Java中“happens-before”的关系,分析Java中的内存一致性效应(Memory Consistency Effects)及其重要性
Java面试题:Java内存模型与并发编程知识点,解释Java中“happens-before”的关系,分析Java中的内存一致性效应(Memory Consistency Effects)及其重要性
11 0
|
18天前
|
消息中间件 负载均衡 Java
JAVA面试之MQ
JAVA面试之MQ
29 0
|
21天前
|
算法 Java Linux
python中的面试常考知识点
python中的面试常考知识点
|
29天前
|
消息中间件
02.交换机RabbitMQ交换机
02.交换机RabbitMQ交换机
16 0