Workflow 是否可以在Erlang中构建工作队列?

Workflow 是否可以在Erlang中构建工作队列?,workflow,erlang,Workflow,Erlang,我在Erlang中看到了很多聊天示例,但是列表呢,比如工作队列?如果我想构建一个工作队列系统,比如项目管理系统,是否可以在流程邮箱中重新排序邮件,或者我必须使用邮件优先级?是否有内置于Erlang中的工作流系统的示例?您不能在Erlang中对流程消息队列中的消息重新排序 然而,你可以选择性地接收你认为最重要的信息。这并不完全相同,但适用于大多数目的 下面是一个例子: receive {important, Msg} -> handle(Msg) after 0 -&

我在Erlang中看到了很多聊天示例,但是列表呢,比如工作队列?如果我想构建一个工作队列系统,比如项目管理系统,是否可以在流程邮箱中重新排序邮件,或者我必须使用邮件优先级?是否有内置于Erlang中的工作流系统的示例?

您不能在Erlang中对流程消息队列中的消息重新排序

然而,你可以选择性地接收你认为最重要的信息。这并不完全相同,但适用于大多数目的

下面是一个例子:

receive
    {important, Msg} ->
        handle(Msg)
after 0 ->
    ok
end,
receive
    OtherMsg ->
        handle(Msg)
end
它不同于:

receive
    {important, Msg} ->
        handle(Msg);
    OtherMsg ->
        handle(Msg)
end

在继续处理其余消息之前,它将始终扫描整个消息队列以查找
{important,Msg}
。这意味着这些类型的消息将总是在其他消息(如果存在)之前被处理。当然,这需要付出一定的性能代价(需要花费更多的时间扫描整个队列两次)。

处理邮箱与处理作业队列一样工作良好


只需让您的邮件包含足够的信息,以便于编写选择性接收模式,您就不会觉得有必要重新排序邮箱内容。

如果确实需要重新排序邮件,您可以遵循网关管理员模式:将邮箱具体化为单独的流程。当您的原始进程准备好接收另一条消息时,守门人可以根据您选择的任何规则计算要转发的消息