AMQP 客户端与同步消息的正确行为

Posted

技术标签:

【中文标题】AMQP 客户端与同步消息的正确行为【英文标题】:Correct behaviour of AMQP client vs synchronous messages 【发布时间】:2010-12-13 10:20:32 【问题描述】:

我最近遇到了一个实现 AMQP 客户端协议的流行库的问题。 AMQP 规范定义了同步和异步消息。问题是我一个接一个地发送了两个同步请求,而没有等待第一个完成并且 RabbitMQ 服务器以相反的顺序响应。图书馆希望响应以与请求发送相同的顺序出现。这是图书馆的错误还是我的误用?

问题是:AMQP 客户端是否应该自行处理同步调用的序列化?

以下是我发现相关的一些参考资料。规范文档 [1] 第 2.2.1 节说明如下:

为了简化方法处理,我们为每个同步请求定义了不同的回复。也就是说,没有 方法用作两个不同请求的回复。这意味着一个对等点,发送一个同步 request,可以接受和处理传入的方法,直到获得有效的同步回复之一。这 将 AMQP 与更传统的 RPC 协议区分开来。

这里的误解是作者的意思是对传入方法的处理仅限于异步调用(如basic_deliver)还是还包括对不同同步调用的响应。

[1]http://www.amqp.org/confluence/download/attachments/720900/amqp0-9-1.pdf?version=1&modificationDate=1227526523000

【问题讨论】:

【参考方案1】:

您的 Amqp 客户端库应通过在发送同步后等待相应的响应消息来强制同步消息。信息。这里的一个例外是使用“no-wait”字段并将值设置为 true,某些方法允许这样做,在这种情况下,客户端库不应等待响应,因为 no-wait 标志实际上表示“don”不要向我发送响应消息”。

顺便说一句,您使用的是哪个客户端库?

【讨论】:

0 反对票接受我正在使用 txamqp。现在我有自己的补丁叉,如果它不是异步调用的预期响应,它只会将响应排入队列。

以上是关于AMQP 客户端与同步消息的正确行为的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ与AMQP协议

消息队列客户端开发向导二(基于 Spring 的 amqp 实现)

消息队列客户端开发向导二(基于 Spring 的 amqp 实现)

消息中间件-----AMQP概论rabbitMQ入门

消息中间件-----AMQP概论rabbitMQ入门

什么是AMQP