Cognito ListUsers продолжается вечно - PullRequest
0 голосов
/ 18 октября 2018

Эй, я написал некоторый код для загрузки всех пользователей в моем пуле пользователей Cognito, однако, похоже, он продолжается вечно.Я совершенно уверен, что правильно использую токен пагинации.По оценкам пользовательского интерфейса Cognito, у меня ~ 10000 пользователей, однако я поместил минуты цикла останова в свой цикл, а у моего List более 50 000, что не имеет смысла.

Помощь очень ценится!

        using (AmazonCognitoIdentityProviderClient provider = AuthorizedClient())
        {
            try
            {
                List<UserType> users = new List<UserType>();
                bool continueListing = true;

                ListUsersResponse response = provider.ListUsers(
                    new ListUsersRequest
                    {
                        UserPoolId = UserPoolId,
                        Limit = 60,
                        AttributesToGet = new List<string>
                        {
                            "email"
                        }
                    });

                users.AddRange(response.Users);
                string paginationToken = response.PaginationToken;
                while (continueListing)
                {
                    response = provider.ListUsers(
                        new ListUsersRequest
                        {
                            UserPoolId = UserPoolId,
                            Limit = 60,
                            PaginationToken = paginationToken,
                            AttributesToGet = new List<string>
                            {
                                "email"
                            }
                        });

                    if (response.Users.Count < 60)
                    {
                        continueListing = false;
                    }
                    else
                    {
                        paginationToken = response.PaginationToken;
                        users.AddRange(response.Users);
                    }
                }

                return users;
            }
            catch (Exception)
            {
                //_session.NotifyUser(Notification.GeneralError());
                //_logger.LogError(e.Message);
            }

            return null;
        }

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Я закончил тем, что все заработало, используя ворота скорости.Я думаю, что когда вы спам-запросы, что-то путается во вселенной HTTP, и вы начинаете получать забавные ответы.В любом случае, если вы превысите 5 вызовов API ListUsers в секунду, вы получите исключение RateExceedException, и оно не будет работать независимо, поэтому я все равно нуждался в ограничении скорости.

Это «RateGate», который я использовал, и он действительно работаетЧто ж.Я просто установил его, чтобы ограничить цикл 4 итерациями в секунду (на одну меньше максимума).

https://github.com/Danthar/RateLimiting

0 голосов
/ 18 октября 2018

Не перечисляйте своих пользователей от cognito!Вы собираетесь начать выходить за пределы их API.Опрос вашей базы данных для ваших пользователей, у вас есть больше контроля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...