erlang - 如何限制消息队列或模拟它?

5 erlang message-queue

现在我正在做过程!消息,但正如我google了一下,消息队列大小仅限于内存.我有一个进程树,其中叶子生成消息并提供给根,我需要限制队列或切换到另一种方法来做同样的事情.

更多的是,有时Process从一片叶片中获取消息,有时从两片叶片中获取消息.在第二种情况下,我需要不同的有限队列的屋檐叶.

arc*_*lus 9

没有内置机制来限制进程的消息队列的大小.

在erlang中解决这个问题的通常方法是在生产者和消费者之间引入流量控制协议.这可以像发送方continue在发送下一条消息之前等待回复一样简单.您可以发明更复杂的流控制协议(窗口,...),但通常发送/等待回复都可以.该gen_server:call/2协议是一个很好的请求-响应协议,并且可以重新使用通过查看代码gen_servergen:call-它需要大量的边缘的情况下是可能的照顾.

另一种方法是通过系统提取消息而不是推送消息 - 在这种情况下,接收方会在发送消息准备好时要求发送方发送消息.虽然如果您有外部生产者,您无法对其进行速率限制或缓冲,那么您可能没有此选项.