1. RabbitMQ实战应用技巧
1.1. 前言
由于项目原因,之后会和RabbitMQ比较多的打交道,所以让我们来好好整理下RabbitMQ的应用实战技巧,尽量避免日后的采坑
1.2. 概述
RabbitMQ有几个重要的概念:虚拟主机,交换机,队列和绑定
- 虚拟主机:一个虚拟主机持有一组交换机、队列和绑定,我们可以从虚拟主机层面的颗粒度进行权限控制
- 交换机:Exchange用于转发消息,它并不存储消息,如果没有Queue队列绑定到Exchange,它会直接丢弃掉生产者发来的数据。
交换机还有个关联的重要概念:路由键,消息转发到哪个队列根据路由键决定 - 绑定:就是绑定交换机和队列,它是多对多的关系,也就是说多个交换机可以绑同一个队列,也可以一个交换机绑多个队列
1.3. 交换机
交换机有四种类型的模式Direct, topic, Headers and Fanout
1.3.1. Direct Exchage
Direct模式使用的是RabbitMQ的默认交换机,也是最简单的模式,适合比较简单的场景
如下图所示,使用Direct模式,我们需要创建不同的队列,而默认交换机则通过Routing key
路由键的值来决定转发到哪个队列,可以看到,路由键绑定队列是可以指定多个的
![d9377cbc91bdd5d813176152ccad856c.png](https://i-blog.csdnimg.cn/blog_migrate/fc3323f8932e4b36d0ba4d430c1dbf37.jpeg)
1.3.2. Topic Exchange
Topic模式主要是根据通配符匹配,也就类似于模糊匹配,当这种匹配模式和路由键匹配后交换机就能转发消息到指定队列
- 路由键为一串字符串,由句号(
.
)隔开,比如a.b.c
- (
*
)代表指定位置一个单词,(#
)代表零个或者多个单词,比如a.*.b.#
,表示a和b中间随意填个单词,b后面可以跟n个单词,比如a.x.b.c.d.e
Topic模式和Direct模式的区别在于交换机需要自己指定,路由键支持模糊匹配,例如:
rabbitTemplate.convertAndSend("topicExchange","a.x.b.d", " hello world!");
1.3.3. Headers Exchage
Headers也是根据规则匹配,但它不是根据路由键了,headers