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

问题描述 投票:0回答:1

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

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

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

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

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

    public class HomeController : Controller
    {
        [HttpPost]
        [Route("mail1")]
        public ActionResult Mail()
        {
            var emailObj = MailGun.Receive(Request);

            return Content("ok");

            _ = await CRM.SendToEmailApp(emailObj);
        }
    }

谢谢您的帮助!

c# http-post mailgun
1个回答
0
投票

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

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

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

simple architecture

© www.soinside.com 2019 - 2024. All rights reserved.