我有一个网络api方法:-
[POST]
public void SaveData()
{
}
我想以一种方式实现,如果SaveData()方法中的代码已经被执行,那么SaveData方法将不接受任何其他调用。
即我想将对savedata方法的调用保持在队列中。 当一个电话结束时,将发生另一个电话。
注意:-调用SaveData()方法不在我的范围内。我无法决定以同步方式还是异步方式调用此api方法。
我所能从事的只是编写SaveData方法的代码。它将被称为彻底的外部系统。
答案 0 :(得分:1)
我强烈建议您在应用程序中使用消息队列系统。 mjwills 在评论部分提供了两种出色的消息代理软件解决方案:
在您可以在应用程序中使用任何这些解决方案之前,都需要进行集成,但是之后将非常简单:
[POST]
public void SaveData()
{
var msg = new SaveDataMessage();
/* populate msg object... */
this.queueClient.Publish(msg);
}
此伪代码将消息发布到队列。另一方面,队列订户将按顺序接收和处理这些消息,例如:
public void OnMessage(SaveDataMessage msg)
{
/* process message... */
}
其他好处是 i),订阅者可以在独立的流程中运行,这意味着您的API请求可以立即返回,并且后台工作人员会处理消息 ii)随着您的应用程序的扩展,该架构将与负载平衡的API兼容。
尽早在应用程序中构建此结构绝对值得。从长远来看,它将为您提供更大的灵活性和生产力。
我写了一篇有关该主题的文章,其中包含此答案的更详细的补充信息:Using queues to offload Web API