响应MailGun的HTTP帖子,然后处理消息

时间:2019-10-28 01:23:36

标签: c# http-post mailgun

通过MailGun接收邮件时,他们需要在有限的时间内回复。我对此有两个问题:

1)收到消息后,我需要处理并将其记录在我的CRM中,这需要一些时间。这导致MailGun在我发送响应之前超时。然后,MailGun随着超时继续反复发送该消息。

2)MailGun的帖子不是异步的,但是对我的CRM的api调用是异步的。

因此,我需要向MailGun发送200响应,然后继续处理该消息。而且该过程必须是异步的。

以下代码显示了我想要发生的事情。我尝试使用任务,但无法正常工作。有时候,如果解决方案需要某种并行任务或线程,则可能需要一次处理很多电子邮件(例如初始化某人的帐户时),

fun addMessageToDatabase(message: String, fromId: String, toId: String,
                                addedMessageSuccessHandler: () -> Unit,
                                addedMessageFailureHandler: () -> Unit) {



    val latestMessageRef = mDatabase.getReference("/latest-messages/$fromId/$toId")
    latestMessageRef.setValue(message).addOnSuccessListener {
        latestMessageUpdateSuccessHandler.invoke()

    }.addOnFailureListener {
        latestMessageUpdateFailureHandler.invoke()
    }
}

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

执行所描述内容的最简单方法(不建议这样做,因为如果应用程序崩溃可能会丢失一些结果),是使用即发即忘任务:

var emailObj = MailGun.Receive(Request);
Task.Run(async () => await CRM.SendToEmailApp(emailObj));
return Content("ok");

但是,我认为您真正想要的是某种消息队列,通过使用消息队列,您可以将消息放入队列(足够快)并立即返回,同时处理器正在处理消息排队并将结果保存在CRM中。
这就是使用消息队列代理时的外观。

simple architecture

相关问题