在异步消息传递中,客户代理通信是同步的吗?

In asynchronous messaging, is client-broker communication synchronous?

在 Chris Richardson(2019 年)的微服务模式一书的第 67 页上讨论异步消息时,作者写道:

Synchronous—The client expects a timely response from the service and might even block while it waits.

Asynchronous - The client doesn’t block, and the response, if any, isn’t necessarily sent immediately

鉴于此,从“同步”到“异步”通信似乎实际上只是将一个同步服务(例如,服务 A)与不同的同步服务(例如,消息代理上的侦听端口,如 Active)交换MQ、Kafka、IBM MQ、AWS Kinesis 等)。

那是因为客户端在与代理通信时可能仍必须阻塞(或至少使用池中的 1 个线程或连接),而不是直接与服务 A 通信——特别是因为客户端可能期望出于可靠性目的的代理响应(例如,SUCCESS)。

分析正确吗?

是的,你的分析是正确的。

针对您的案例,代理的客户端库向调用方代码(例如 ServiceA)提供异步功能,which means that it doesn't block the ServiceA's thread until the operation is finished,但它允许您提供将被调用的回调(异步操作的结果)完成时。

现在的问题是:谁将调用该回调?嗯,来自代理客户端库的一些代码,它运行在一个线程上,该线程可能会定期检查操作是否完成(或最终会发出此结果的任何其他逻辑)。

所以是的,必须有一些后台线程做一些同步工作来获取这些结果。