简单模式:
不需要交换机,生产者将消息发送到队列中,消费者从队列中拿数据,应用场景有1对1的聊天
工作模式:
生产者将消息发送到队列中,将有多个消费者竞争消费消息,在高并发时可能会出现同一个消息被多个消费者消费的问题,这个可以在业务上增加唯一的键值来避免,红包的场景可以用这种模式实现
订阅模式:
每个队列收到的消息都是一样的
路由模式:
服务端将消息投放到路由上
客户端通过将队列和路由键进行绑定,将只会接收对应路由的消息,而不会像订阅模式那样无差别的接收交换机的消息
主题模式:
和路由模式类似,主要通过通配符*或#来模糊匹配路由配,进而接收队列中的数据
无论哪种模式消费者都需要借助队列来接收消息
queue_bind用于将交换所、队列、路由进行绑定,只用在消费端
无论哪种模式如果多个消费者消费的是同一个队列,那么消息将会被竞争消费
如果同一个消息被分发到了多个队列,那么消息就可以被多次消费
rabbitmqctl list_bindings:验证代码是否真正创建了绑定和队列
rabbitmqctl list_queues:看到RabbitMQ有什么队列以及它们中有多少条消息
使用了交换所要告诉交换所将消息发送到我们的队列,如果没有队列绑定到交换机上,这些消息将会丢失;如果使用了路由key,生产者将消息发送到交换所并指定路由键,交换所将消息发送到已经绑定了此交换所和路由键的队列
对topic的总结一下:
1.生产者将消息发送到交换所并指定了路由键
2.交换所将消息发送到已经绑定了此交换所及生产者指定的路由键的队列中,如果没有这样的队列,这些消息将会丢失(在消费端可以先进行绑定)
3.消费者从队列中消费消息
所以绑定要先于消息发送
有交换所和路由键时,消息会进入与交换所和路由键绑定的队列
只有交换所时,消息会进入与交换所绑定的队列