管理来自Microsoft graph API的多个发布请求以进行通知

时间:2019-05-20 18:45:57

标签: azure azure-active-directory microsoft-graph microsoft-graph-sdks

我正在按照示例https://github.com/microsoftgraph/msgraph-training-changenotifications/blob/master/demos/03-track-changes/Controllers/NotificationController.cs来为azure dev Ops中的组更改设置通知。

上面的github示例使用Delta Query来获取最新更改。

我已经对上面链接中描述的实际项目进行了一些修改,因此我的代码中有一个发布端点,如下所示,

public async Task<ActionResult<string>> Post([FromQuery]string validationToken = null)
    {

        // handle validation
        if (!string.IsNullOrEmpty(validationToken))
        {
            return Ok(validationToken);
        }            


        // handle notifications
        using (StreamReader reader = new StreamReader(Request.Body))
        {
            string content = reader.ReadToEnd();

            var notifications = JsonConvert.DeserializeObject<Notifications>(content);

            foreach (var notification in notifications.Items)
            {
               Console.WriteLine($"Received notification: '{notification.Resource}', {notification.ResourceData?.Id}");
            }
        }

        // use deltaquery to query for all updates and do my stuff(eg:create an entry in database)
        await CheckForUpdates(_deltaLink);

       //when my stuff is completed get the latest deltalink and update the _deltaLink  which is a static object
        var newDeltaLink = await _deltaQueryService.GetLatestDeltaLink();


       _deltaLink = newDeltaLink;

        return Ok();

}

我的问题是,只有一个单独的更改时,此帖子才能正常运行,但是当到达该步骤之前几毫秒之内有多个帖子请求时

var newDeltaLink = await _deltaQueryService.GetLatestDeltaLink();

第二个请求进入并执行

await CheckForUpdates(_deltaLink); 

两次,所以我得到了重复的组更改,因为在第一个请求之后deltaLink没有得到更新。

有没有一种方法可以管理发布请求,以便在更改增量链接后获得第二个发布请求? #

1 个答案:

答案 0 :(得分:0)

由于您已经在处理中,因此无法告诉Microsoft Graph保留通知,因此对此操作的任何管理都必须在您的应用程序中进行。您可能有多种成功完成此操作的方法,但是想到的一种方法是:

  • 收到通知时,将其添加到您在单独的线程/进程中处理的队列。
  • 一次处理队列中的每个通知,并在每次同步后更新deltaLink。