4.2 发后即忘模型
1.警告通知
2.并行处理
3.用 RabbitMQ 实现 RPC 并等待响应
RPC:
使用rabbit来实现RPC时,你只是简单的发布消息而已。rabbitmq会负责使用绑定来路由消息到合适的队列。rpc服务器会从这些队列上消费消息。
rabbitmq替你完成了所有工作:将消息路由到合适的地方,通过多台rpc服务器对rpc消息进行负载均衡,甚至当处理消息的服务器崩溃时,将rpc消息
重发到另一台。
私有队列和发送确认:
由于amqp消息是单向的,rpc服务器如何才能将结果返回给原始客户端呢?由于rabbit处于中间环节,rpc服务器甚至都不知道客户端调用者的身份(
除非在消息内放入特定的id)。rabbit团队的方案:使用消息来发回应答。在每个amqp消息头中有个字段叫做 reply_to。消息的生产者可以通过该字段
来确定队列的名称,并监听队列等待应答。然后接受消息的rpc服务器能够检测 reply_to 字段,并创建包含应答内容的新的消息,并以队列名称作为路由键。
你也许会想'关每次创建唯一队列名就得花很多功夫吧'。我们怎么阻止其他客户端读到应答消息呢?如果你声明了没有名字的队列,rabbit会为你指定一个。
这个名字恰好是唯一的队列名;同时在声明的时候指定 exclusive参数,确保只有你可以读取队列上的消息。所有的rpc客户端需要做的是声明临时的,排他的,
匿名的队列,并将该队列名称包含到rpc消息的 reply_to 头中,于是服务器就知道应答消息发往哪儿了。值得注意的是我们并没有提到应答消息绑定到交换器上,
这是因为rpc服务器将应答消息发到rabbit时没有指定交换器,rabbit就知道目的地是应答队列,路由键就是队列的名字。
4.1 解耦风雨路:谁将我们推向消息通信