Как обрабатывать несколько запросов в одной конечной точке перезапуска веб-сервиса - PullRequest
0 голосов
/ 11 июля 2019

Я разработал веб-приложение, используя веб-фреймворк Grails, и разрабатываю его для своей платформы электронной коммерции, где я делаю предложения пользователям, таким как «Flash Sale».

Я успешно создал API для этого в одном из моих контроллеров, где я бронирую продукт.Логика здесь If that product is completely sold and is not available i.e in other words if i have 0 products remaining then i shouldn't book the product and should tell the booking user about this, for this am returning status code as 204.

Беспорядок, который беспокоит меня здесь, What if many customers starts booking the product exactly at the same time altogether. Scenario lets say i have only 20 pieces of product to be sold and 21 customers started booking the product at the same time.Для этого я буду блокировать / обрабатывать запросы API по очереди (в очереди).Не знаю, как это сделать, пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 11 июля 2019

Вы когда-нибудь использовали ключевое слово synchronized в Java?Он используется для формирования очереди потоков, где потоки будут формировать строку для доступа к определенному фрагменту кода.Чтобы определить, должен ли поток ждать, вы передаете экземпляр объекта синхронизированному блоку и, если уже есть другой поток, использующий тот же блок в том же экземпляре, он будет ждать, пока все предыдущие потоки не будут завершены.В этой статье объясняется использование синхронизированных: https://www.geeksforgeeks.org/synchronized-in-java/.

Кроме того, вот пример того, что я имею в виду.Я собираюсь просто использовать экземпляр статического объекта, что означает, что все потоки будут использовать один и тот же экземпляр объекта, что заставит их всех ждать своей очереди:

static Object threadLock = new Object();

void doSomething() {
    // region Some code that all threads can execute at once
    ...
    // endregion

    // region Synchronized code
    synchronized(threadLock) {
        // Have your winner logic here. Threads will only go into this block in a first-come-first-served basis.
    }
    // endregion
}

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

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