RabbitMQ、RPC和相关ID匹配

RabbitMQ、RPC和相关ID匹配,rabbitmq,rpc,Rabbitmq,Rpc,我正在学习RabbitMQ RPC教程()之一,对相关ID匹配有点困惑 本教程说明: 此时将使用CorrelationId属性。我们将为每个请求设置一个唯一的值。稍后,当我们在回调队列中收到消息时,我们将查看此属性,并基于此,我们将能够将响应与请求相匹配。如果我们看到一个未知的CorrelationId值,我们可以安全地丢弃该消息-它不属于我们的请求 但是,为什么在我们已经从队列中使用了消息之后丢弃它是“安全的”?期待该消息的客户机呢?消息不应该重新排队以防止丢失吗?听起来很合理。但在重新请求后

我正在学习RabbitMQ RPC教程()之一,对相关ID匹配有点困惑

本教程说明:

此时将使用CorrelationId属性。我们将为每个请求设置一个唯一的值。稍后,当我们在回调队列中收到消息时,我们将查看此属性,并基于此,我们将能够将响应与请求相匹配。如果我们看到一个未知的CorrelationId值,我们可以安全地丢弃该消息-它不属于我们的请求


但是,为什么在我们已经从队列中使用了消息之后丢弃它是“安全的”?期待该消息的客户机呢?消息不应该重新排队以防止丢失吗?

听起来很合理。但在重新请求后,原始消息的发送者将不会收到该消息。没有更多关于交换、绑定和队列设置的知识,很难判断重新排队是否有意义


上面链接的教程似乎有意不涉及这个复杂的问题。我认为,如果有一个教程告诉读者如何从技术上使用RabbitMQ的RPC功能,那么这个教程就不适用了。

假设我们有一个简单的场景。专用请求队列、专用响应队列、默认exchange、1台客户端、1台服务器。客户端并行地发出RPC请求(例如,管理跨线程的并发请求的web服务器)。我如何保证每个请求者都会收到他们预期的响应?过去,我通过为每个请求创建一个队列来解决这个问题,但这似乎效率低下。为每个请求者创建一个队列如何?如果web服务器同时收到10个请求,这将导致10个线程、10个请求者和10个临时队列来答复。这就是我现在实现它的方式,它是有效的。我希望找到一个解决方案,不需要一直旋转和拆除临时队列。