Open dccmmtop opened 2 years ago
生产者在某个队列上等待消费者返回的消息, 这个队列被称为应答队列,RabbitMQ 天生支持应答队列的机制。
当一条消息被消费者处理后,需要告知生产者一些信息时,消费者就需要在应答队列上发布一条应答消息。当应答消息被生产者处理后,应答队列就应该被删除 这时,生产者就像客户端的角色,而消费者就像服务器的角色。由此可知,应答队列应该与消息一对一存在,并且队列名称唯一,应答消息被处理后,队列就应该删除。很棒的是,RabbitMQ的匿名队列很好的满足了这个特性.
从上代码中可以看出,利用应答队列是不是也可以实现 HTTP 服务器的功能,客户端发起请求, 服务器处理请求,返回数据,客户端处理返回数据
我们知道,RabbitMQ中的队列要绑定到交换器上,才能通过路由将消息正确的投递到队列上,但是上面的服务端发送应答消息时,将消息头中的应答队列设置为消息的路由key,并没有绑定的动作,为什么也行得通呢?
其实,不同于通过RabbitMQ发布的任何其他消息,这里没有交换器。这是关于通过Rabbit来实现RPC通信的唯一两处特别的地方:使用reply_to作为发布应答消息的目的地,同时发布的时候无须指定交换器。
生产者在某个队列上等待消费者返回的消息, 这个队列被称为应答队列,RabbitMQ 天生支持应答队列的机制。
什么时候需要应答队列
当一条消息被消费者处理后,需要告知生产者一些信息时,消费者就需要在应答队列上发布一条应答消息。当应答消息被生产者处理后,应答队列就应该被删除 这时,生产者就像客户端的角色,而消费者就像服务器的角色。由此可知,应答队列应该与消息一对一存在,并且队列名称唯一,应答消息被处理后,队列就应该删除。很棒的是,RabbitMQ的匿名队列很好的满足了这个特性.
上代码
客户端(生产者)
服务端(消费者)
从上代码中可以看出,利用应答队列是不是也可以实现 HTTP 服务器的功能,客户端发起请求, 服务器处理请求,返回数据,客户端处理返回数据
我们知道,RabbitMQ中的队列要绑定到交换器上,才能通过路由将消息正确的投递到队列上,但是上面的服务端发送应答消息时,将消息头中的应答队列设置为消息的路由key,并没有绑定的动作,为什么也行得通呢?
其实,不同于通过RabbitMQ发布的任何其他消息,这里没有交换器。这是关于通过Rabbit来实现RPC通信的唯一两处特别的地方:使用reply_to作为发布应答消息的目的地,同时发布的时候无须指定交换器。