让我们说我的Erlang应用程序从外部收到一条重要消息(例如通过公开的API端点)。由于应用程序中的错误或格式错误的消息,处理邮件的进程崩溃。
消息会怎样?如何影响消息的发生?在进程邮箱中等待的其他邮件会发生什么?我是否必须引入流程层次结构以确保没有消息丢失?
在Erlang中是否有类似Akka的死信队列?让我们说我想稍后处理这个消息 - 通过修复消息或修复应用程序本身的bug,然后重新运行消息处理。
我很惊讶这个主题的信息很少。
答案 0 :(得分:6)
没有信息,因为没有死信队列,如果你在处理你的消息时应用程序崩溃了消息就已经收到了,为什么它会进入死信队列(如果存在)。
这样的队列将是一个主要的可扩展性问题,没有多大用处(你会收到无法发送的任意消息,并且完全脱离上下文)
如果您需要确保处理邮件,通常会使用一种方法在处理邮件时收到回复,如gen_server调用。
如果您的消息非常重要,如果丢失则会发生灾难,您应该将其保留在外部数据库中,否则如果您的计算机崩溃了所有传输中的消息会发生什么?