生产者(Producer)
消息的创建者。
负责创建和推送数据到消息服务器。
消费者(Consumer)
消息的接收方。
负责接收消息和处理数据。
消息队列是RabbitMQ的内部对象,用于存储生产者的消息直到发送给消费者,它是消费者接收消息的地方。
消息队列的重要属性:
交换机用于接收,分配消息。
1. 生产者要先指定一个routing key,然后将消息发送到交换机。
2. routing key需要与exchange type和binding key联合使用才能最终生效。
3. 交换机将消息路由到一个或多个队列中,或丢弃。
交换机包含4中类型: direct, topic, fanout, headers。
Direct Exchange是RabbitMQ的默认交换机模式。
这是最简单的模式。
它根据routing key全文匹配去寻找队列。
在绑定队列时会设定一个routing key(通常是队列的名字)。
只有在消息的routing key与队列匹配时,消息才会被交换机投送到绑定的队列中。
主题交换机(Topic Exchange)主要根据通配符转发消息。
这种方式最灵活。
交换机和队列的绑定会定义一种路由模式。
路由键(routing key)和路由模式匹配后,交换机才能转发消息。
在这种交换机模式下,路由键(routing key)必须是一串字符,用"."隔开。
路由模式必须包含一个星号"*", 主要用于匹配路由键指定位置的一个单词。
* 匹配一个单词。
# 匹配0个或多个单词。
eg:
binding key: *.com.#
匹配的routing key: cn.com, us.com.aa
不匹配: com.bb
这种方式将消息广播到所有绑定到它的队列中。
不考虑routing key的值,即使配置了路由键,依然会被忽略。
消息确认是指当一个消息从队列中投递给消费者(consumer)后,消费者会通知一下消息代理(broker)。
消息确认可以自动,也可以由处理消息的开发者手动执行。
当启用消息确认后,消息代理需要收到来自消费者的确认回执后,才完全将消息从队列中删除。
应用场景:
将发送的电子邮件放到消息队列,然后邮件服务在队列中获取邮件并发送给收件人。
应用场景:
一个订单的处理需要10s,有多个订单可以同时放到消息队列,
然后让多个消费者同时并行处理,而不是单个消费者的串行消费。
应用场景:
更新商品库存后需要通知多个缓存和多个数据库。
结构如下:
原文:https://www.cnblogs.com/davidgu/p/14702449.html