我正在使用 RabbitMQ 阅读AMQP 中的RPC-Model。本教程创建一个临时队列,并且correlationId
. 临时队列是唯一的,那我们为什么需要correlationId呢?我是 JMS 人,在 JMS 中,我们以两种方式请求/响应:
为每个请求/响应创建临时队列
创建一个响应队列并使用
correlationId
和消息选择器。
有人可以解释为什么我们需要临时队列和correlationId
AMQP RPC 模型吗?似乎 AMQP 没有消息选择器之类的东西。我对吗?
正确的临时队列对于发出 RPC 请求的客户端是唯一的。我们可以创建 RPC 客户端,为它发出的每个唯一请求创建一个唯一队列,但这会效率低下 - 请参见 CorrelationId的第一段:
在上面介绍的方法中,我们建议为每个 RPC 请求创建一个回调队列。这是非常低效的,但幸运的是有一个更好的方法——让我们为每个客户端创建一个回调队列。
因此,一种更好的方法是拥有一个 RPC 客户端获取响应的队列,并使用correlationId 将 RPC 客户端发出的请求与 RPC 服务器发回的结果相匹配。
...在该队列中收到响应后,尚不清楚该响应属于哪个请求。这就是使用correlation_id 属性的时候。我们将为每个请求将其设置为唯一值。稍后,当我们在回调队列中收到一条消息时,我们将查看此属性,并基于此将响应与请求进行匹配。如果我们看到一个未知的correlation_id 值,我们可以安全地丢弃该消息——它不属于我们的请求。
所以参考RPC 教程的总结部分: