消息模型
消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。
![](https://img.haomeiwen.com/i12411425/4094f008a0b35603.png)
概念介绍
- message:消息,生产者、消费者之间传递的内容
- Publisher:消息的生产者,将消息发布到队列
- Consumer:消息的消费者,监听某个队列
- Queue:队列,消息的容器,接收生产者发送的消息,等待消费者消费消息
- Exchange:交换器,接收消息,根据一定的规则将消费发布到队列
- Binding:将交换器和队列安装路由规则绑定起来
- Virtual host:虚拟主机,交换器、队列都在虚拟主机上,默认vhost是/
- Broker:队列服务器实体
队列模式
-
简单队列:一个生产者对应一个消费者
1120165-20180701235656495-1545126593.png
-
work模式:一个生产者对应多个消费者,一个消息只能有一个消费者获得
1120165-20180717220023680-448688747.png
-
使用Exchange交换器
Exchange交换器类型
队列通过路由规则绑定到Exchange上,生产者发布通过Exchange发布消息,Exchange根据路由规则转发给队列
-
direct:消息发布到路由键完全匹配队列上
1120165-20180718083442885-1494790239.png
-
fanout:消息会发布到Exchange上绑定的所有队列
1120165-20180718083638143-429562200.png
-
topic:模糊的绑定方式,* 匹配一个单词,# 匹配0个或多个字符,*、# 只能写在.号左右,且不能挨着字符,单词和单词之间需要用.隔开。
1120165-20180718083919786-192973991 (1).png
topic匹配规则示例:
Routing key是user.log.#,#是匹配0个或多个字符,下面的都可以匹配:
user.log
user.log.info
user.log.a
user.log.info.login
Routing key是user.log.*, *匹配一个单词
user.log.info 可以匹配
user.log 不能匹配
user.log.info.login 二个单词,不能匹配
*和#也可以放到前面,Routing key是*.action.#:action前面必须一个单词,后面0或多个
action 不符合
action.log 不符合
user.action 符合
user.action.log 符合
user.action.log.info 符合
user.log.action 不符合
springboot结合rabbitmq示例:https://www.jianshu.com/p/2b20e0eaf635
网友评论