【问题标题】:RPC pattern problemsRPC 模式问题
【发布时间】:2017-12-12 11:42:27
【问题描述】:

我从官方文档中阅读了有关 RPC 模式的信息,但是示例非常简单。客户端发送一条带有reply_to和correlation_id属性的消息,服务器从队列中获取一条消息并重新发送给绑定相同correlation_id的客户端。

我的问题是:

1)如果服务器关闭,客户端如何得到响应

2) 如何在客户端设置 RPC 超时时间

3) 如果服务器坏了抛出异常,我们应该把这个异常发送给客户端

我将不胜感激。

【问题讨论】:

    标签: java rabbitmq rpc


    【解决方案1】:
    1. 将服务器用于确认 RPC 调用是一种很好的做法。 RabbitMQ docs(在 Python 部分)中描述的类似内容:

      虽然不太可能,但 RPC 服务器可能会在向我们发送答案之后,但在发送请求的确认消息之前死亡。如果发生这种情况,重新启动的 RPC 服务器将再次处理该请求。这就是为什么在客户端我们必须优雅地处理重复响应,并且 RPC 应该是理想的幂等。

    2. 您可以为消息或整个队列设置 TTL:https://www.rabbitmq.com/ttl.html

    3. 视情况而定。如果请求是幂等的,则可以不确认消息 - 另一个工作人员将处理它。但它可能成为毒丸:此类请求将填满您的 RPC 队列并导致 DoS。因此,您可以手动处理它,例如使用 retry_count 标头(如果失败的工人重新排队消息,计数器递减)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多