java - RPC 模式问题

标签 java rabbitmq rpc

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

我的问题是:

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

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

3)如果服务器坏了并抛出异常,我们是否应该将此异常发送给客户端

如果有任何答复,我将不胜感激。

最佳答案

  1. 最好的做法是通过服务器来确认 RPC 调用。 RabbitMQ docs中描述了类似的事情(在Python部分):

    Although unlikely, it is possible that the RPC server will die just after sending us the answer, but before sending an acknowledgment message for the request. If that happens, the restarted RPC server will process the request again. That's why on the client we must handle the duplicate responses gracefully, and the RPC should ideally be idempotent.

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

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

关于java - RPC 模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44983243/

相关文章:

java - 如何在java控制台应用程序中终止Q press上的while循环

apache-kafka - Apache Pulsar 与 Apache RocketMQ

javascript - RabbitMQ 在网站上向用户发送消息

windows - 查看通过 ALPC 端口发送的消息?

GWT RPC 序列化

Java - 如何检查两个 ArrayList 是否是唯一对象(即使它们具有相同的值)?

java - 如何在 Selenium 中使用 ChromeDriver

go - 多次使用TCP连接返回 'broken pipe'错误

java - 使用 iText 更改 PDF Producer 属性

rabbitmq - RabbitMQ 中的主题交换与直接交换