dccmmtop / notebook

个人博客记录
0 stars 0 forks source link

RabbitMQ应答队列 #5

Open dccmmtop opened 2 years ago

dccmmtop commented 2 years ago

生产者在某个队列上等待消费者返回的消息, 这个队列被称为应答队列,RabbitMQ 天生支持应答队列的机制。

什么时候需要应答队列

当一条消息被消费者处理后,需要告知生产者一些信息时,消费者就需要在应答队列上发布一条应答消息。当应答消息被生产者处理后,应答队列就应该被删除 这时,生产者就像客户端的角色,而消费者就像服务器的角色。由此可知,应答队列应该与消息一对一存在,并且队列名称唯一,应答消息被处理后,队列就应该删除。很棒的是,RabbitMQ的匿名队列很好的满足了这个特性.

上代码

客户端(生产者)

服务端(消费者)

从上代码中可以看出,利用应答队列是不是也可以实现 HTTP 服务器的功能,客户端发起请求, 服务器处理请求,返回数据,客户端处理返回数据

我们知道,RabbitMQ中的队列要绑定到交换器上,才能通过路由将消息正确的投递到队列上,但是上面的服务端发送应答消息时,将消息头中的应答队列设置为消息的路由key,并没有绑定的动作,为什么也行得通呢?

其实,不同于通过RabbitMQ发布的任何其他消息,这里没有交换器。这是关于通过Rabbit来实现RPC通信的唯一两处特别的地方:使用reply_to作为发布应答消息的目的地,同时发布的时候无须指定交换器。