【问题标题】:In asynchronous messaging, is client-broker communication synchronous?在异步消息传递中,客户端-代理通信是同步的吗?
【发布时间】:2021-06-05 04:25:01
【问题描述】:

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

同步 - 客户端期望服务及时响应,甚至可能在等待时阻塞。

异步 ​​- 客户端不阻塞,响应(如果有)不一定立即发送

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

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

这个分析正确吗?

【问题讨论】:

    标签: asynchronous microservices messaging messagebroker


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 1970-01-01
      • 2015-07-02
      • 2014-04-01
      • 2011-08-27
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多