对RabbitMQ的模型的理解和简单的概念总结
RabbitMQ模型如下:
生产者发出一些消息(包含消息头和消息体),消息头是透明的,消息体是不透明的,可以在消息头里面指定routing-key来间接规定绑定规则。生产者将生产出来的消息发送到交换机上面去,交换机则会把消息分配到对应的消息队列中去,等待消费者的消费。
如果很多个消费者绑定了同一个消息队列,那么有消息发送到消息队列时,只能有一个消费者接收到该消息,其他的消费者接收不到,避免了同一消息被重复消费,所以RabbitMQ不支持队列层面上的广播消费(可以通过交换机来完成)
交换机通过BindingKey来与消息队列绑定在一起,当消息进入交换机的时候,会因为交换机的种类不同而产生不同的行为
交换机主要种类如下:
- fanout
交换机会将消息直接发送到所有与他绑定了的队列中,不做任何判断
- direct
交换机将消息发送到那些BindingKey与RoutingKey完全匹配的队列中
- topic
与direct类似,不过支持BindingKey和RoutingKey的模糊匹配,#匹配0或多个单词,*匹配一个单词。
单词的概念:被点(.)分割的为一个单词
如cn.luckycurve.*可以与cn.luckycurve.rabbitmq匹配上
- headers (不推荐)
如果消息没有被任何交换机接收,那么该消息会被丢弃或者返回给生产者(需要配置mandatory参数)
RabbitMQ的安装——选择带Management的版本去安装
docker pull rabbitmq:3.7.24-management
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq babd922fd7bc
账号:guest 密码:guest
记得第一次登陆15672的管理界面一定要删除guest用户(如果你的ip暴露在公网上的话)