消息通信概念
AMQP元素
上图中展示了三种topic、fanout、direct交换器,Q1、Q2等则是一个个消息队列,包含了多个消息。
交换器、队列、绑定
生产者把消息发布到交换器上;消息最终到达队列,并被消费者接受;绑定决定了消息如何从路由器路由到特定的队列
队列:
- 为消息提供了处所
- 对负载均衡来说,队列是绝佳的方案。只需要附加一堆消费者,并让RabbitMQ以循环的方式均匀地分配发来的消息。
- 队列是Rabbit中消息的最后的终点
交换器-四种类型
- direct:如果路由键匹配,消息就会被投递到对应的队列。
服务器必须实现direct类型交换器,包含一个空白字符串名称的默认交换器。当声明一个队列时,他会自动绑定到默认交换器,并以队列名称作为路由键。
- fanout
当你发送一条消息到fanout交换器时,他会把消息投递给所有附加在此交换器上的队列。这允许你对单条消息做不同的反应。举例来说。一个web应用程序可能需要在用户上传新的图片时,用户相册必须清除缓存,同时用户应该得到些积分奖励。你可以将两个队列绑定到图片上传交换器上,一个用于清除缓存,另一个用于增加用户积分。
- topic
它是的来自不同源头的消息能够到达同一队列。以Web应用程序日志系统为例。你拥有多个不同的日志级别,例如error、info、和warning。与此同时,你的应用程序分为以下几个模块,user、shopping、score等,如果在发送消息的动作失败时,你想要报告一个error,参见如上
- headers 允许你匹配消息的header而非路由键,除此之外,和direct交换器完全一直,