Управление несколькими постами запроса от Microsoft Graph API для уведомления - PullRequest
0 голосов
/ 20 мая 2019

Я следую примеру https://github.com/microsoftgraph/msgraph-training-changenotifications/blob/master/demos/03-track-changes/Controllers/NotificationsController.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 голосов
/ 05 июля 2019

Невозможно указать Microsoft Graph для хранения уведомлений, потому что вы уже обрабатываете, поэтому любое управление этим должно происходить в вашем приложении. Вероятно, есть несколько способов, которыми вы могли бы успешно сделать это, но один способ, который приходит на ум, это:

  • Когда приходит уведомление, добавьте его в очередь, которую вы обрабатываете в отдельном потоке / процессе.
  • Обрабатывайте каждое уведомление из очереди по одному и обновляйте deltaLink после каждой синхронизации.
...