当前位置: 首页 > 知识库问答 >
问题:

如何知道异步 Azure 函数的 SendGrid 消息何时失败?

古彦
2023-03-14

我设置了一个 azure 函数,用于从事件中心读取,以通过 sendgrid 或 twilio 发送警报消息。我希望能够判断何时发送SendGrid消息“await smsCollector.AddAsync(mobileMessage)”是否成功发送 - 即电子邮件不是无效的。这种设置可以吗?

         public static class SendAlert
         {
        [FunctionName("v1_EventHub_SendAlert")]
        public static async Task Run(
            [EventHubTrigger("v1-email-hub", Connection = "EventHubConnection")] EventData[] events,
            [SendGrid] IAsyncCollector<SendGridMessage> messageCollector,
            [TwilioSms(From = "xXXXxxXxxx)] IAsyncCollector<CreateMessageOptions> smsCollector,
            [Inject] NotificationEventLogic eventLogic,
            [Inject] NotificationLogic notificationLogic,
            ILogger log)
        {
            foreach (EventData eventData in events)
            {
                string messageBody = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);

                var notificationEvents = JsonConvert.DeserializeObject<List<NotificationEvent>>(messageBody);

                foreach (var ev in notificationEvents)
                {
                    var notification = await notificationLogic.GetNotificationAsync(ev.NotificationId);

                    if (ev.NotificationEventType == NotificationEventType.Email)
                    {
                        var message = CreateEmail(ev, notification);
                        await messageCollector.AddAsync(message);
                    }
                    else if (ev.NotificationEventType == NotificationEventType.SMS)
                    {
                        var mobileMessage = CreateSms(ev, notification);

                        await smsCollector.AddAsync(mobileMessage);
                    }

                    await eventLogic.CreateEventAsync(ev);
                }

            }
        }

共有1个答案

陶宜民
2023-03-14

IAsyncCollector 有一个可以调用的 FlushAsync 方法。AddAsync 可以缓冲项目,但 FlushAsync 会强制它们通过(并在出错时引发异常)。

 类似资料:
  • 我有一个由IOThub触发的Azure函数。所以在Azure函数中,我有 如何从事件数据中获取设备id。 我试过了 它给出了一个错误的说法 以下文件说:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-messages-construct ConnectionDeviceId包含设备ID。是否有人知道如何从EventDa

  • 我试图了解更多关于异步/等待的信息,尤其是编译器如何知道在异步方法和等待时“暂停”,而不产生额外的线程。 例如,假设我有一个异步方法,如 我知道是我的方法被“挂起”并且调用它的线程返回线程池的地方,一旦跟踪连接打开的完成,然后找到一个可用的线程来运行。 这就是我困惑的地方。我查看了OpenAsync的源代码(https://referencesource.microsoft.com/#System

  • 当失去焦点时,我需要捕捉,我搜索了其他问题,但没有找到答案。 我这样使用 但是,这对我不起作用。

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做

  • 我已经部署了一个AWS Lambda函数,它在SQS队列接收到消息时触发。该函数向Rest API发出请求,如果响应不是Ok,则需要再次处理SQS消息。 这就是为什么我需要将消息重新发送到队列,但我更愿意以编程方式删除SQS消息,尽管我找不到如何配置SQS。我尝试过消息保留,但似乎触发器事件会导致消息被删除。

  • 我的出发点是一个HTTP触发的Azure函数。它从请求正文中收集一些JSON,并将该消息传递给Azure服务总线。 我在这里一定遗漏了一些东西(我以前在RabbitMQ中使用过控制台应用程序),但是我如何从HTTP触发的Azure函数向服务总线发布消息。 我找到了几个关于配置function.json的参考资料(在Visual Studio中就是-im构建)。 **更新**仍然无法使其工作。得到了

  • 嗨, 谢谢你,也很抱歉西班牙语的命名,我知道这让阅读代码变得有点困难。

  • 我有一个简单的JMS主题侦听器,我希望将它与spring-integration链挂钩。 基本上,当在侦听器中接收到JMS消息时,必须将其推入链的通道中。最终,消息被处理并推送到出站通道适配器中使用。 Spring Integration文档提到了异步网关的使用,但它使用了未来。难道没有一种简单的方法可以把消息放在频道上吗? 如果有一个可以指向的例子,那就太好了。 谢谢 问候 马丁