我想要异步消息的速度,但仍然有一些流量控制。我怎样才能在Erlang中实现这个目标?
答案 0 :(得分:7)
目前没有进程内存限制 - 在邮件列表等上讨论。您可以查看这些主题。
另一方面,当您使用像gen_server这样的OTP模式实现时,您可以自由地从进程队列中检索消息并测量队列的长度。
在rabbitmq中使用的gen_server2用于通过将消息移动到内部数据结构来优化它。 在内部队列太长时,您可以丢弃任何新的传入消息。 您可以静默地执行此操作,或通知发件人该邮件已被拒绝。所有这些都处于非常低的水平。
RabbitMQ将在AMQP级别上提供此功能。
答案 1 :(得分:6)
实施流量控制的一种常见且非常好的方法是将精心选择的消息转换为调用,这限制了每个客户端可以将服务器加载到一个的负载量,从而以极其简单的方式有效地提供强制反馈。诀窍当然是选择哪些通信使用同步调用: - )