我最近遇到了一个实施AMQP客户端协议的流行库的问题。 AMQP规范定义了同步和异步消息。问题是我一个接一个地发送了两个同步请求而没有等待第一个完成,RabbitMQ服务器以相反的顺序响应。图书馆希望响应的顺序与发送请求的顺序相同。这是库中的错误还是我的错误?
问题是:AMQP客户端是否应该自行处理序列化同步调用?
以下是我发现的一些参考资料。规范文件[1]第2.2.1节说明如下:
为了简化方法处理,我们为每个同步请求定义了不同的回复。也就是说,没有 method用作两个不同请求的回复。这意味着一个peer,发送一个同步 请求,可以接受并处理传入的方法,直到得到一个有效的同步回复。这个 将AMQP与更传统的RPC协议区分开来。
这里的误解是作者是否意味着传入方法的处理仅限于异步调用(如basic_deliver),还是包含对不同同步调用的响应。
答案 0 :(得分:1)
您的Amqp客户端库应通过在发送同步后等待相应的响应消息来强制执行同步消息。信息。这里有一个例外是使用'no-wait'字段并将值设置为true,某些方法允许这样做,在这种情况下,客户端库不应该等待响应,因为no-wait标志有效地说“don”给我发送回复信息“。
BTW,您使用的是哪个客户端库?