Я создаю небольшой проект электронного банкинга в Java для лучшего понимания RMI.Выполнять один и только один запрос за раз в RMI
На самом деле, я подумал о возможности возникновения каких-либо ошибок при выполнении запроса клиента для внесения денег на его банковский счет.
Другими словами, давайте рассмотрим, есть ли клиент, который хочет внести деньги на свой банковский счет, поэтому клиентская программа отправит запрос на сервер, чтобы удаленно выполнить удаленный метод deposit()
. Теперь давайте предположим, что запрос не может быть отправлен в какой-то момент, потому что некоторые ошибки, поэтому клиент отправит новый запрос, потому что сервер не получил первый. Второй запрос выполнен правильно. Предположим, что через некоторое время сервер получает первый запрос и выполняет его, вот и проблема: запрос был выполнен дважды, но клиент хотел внести деньги только один раз.
До сих пор я пытался добавить столбец в таблице Client (содержащий idClient и пароль и баланс) с именем idRequest, чтобы проверить, есть ли предыдущий запрос, отправленный перед его выполнением. Но это плохое решение.
Как я могу решить эту проблему лучше (без добавления нового столбца в таблицу данных клиента в базе данных, чтобы идентифицировать последний отправленный запрос)?
Ваш вопрос не имеет смысла. Если первый запрос не может быть отправлен, как сервер может его получить? В общем случае, я предлагаю вам подробно ознакомиться с транзакцией * idempotence *. – EJP
Я имею в виду, что запрос 1 отправляется первым. На данный момент сервер ничего не получает, поэтому клиент отправляет другой запрос 2, сервер получает запрос 2 и выполняет его, затем он получает запрос 1 и выполняет его. Запрос выполнялся дважды. Как предотвратить повторное выполнение сервером одного и того же запроса? Я хочу, чтобы он выполнялся только один раз, другие запросы должны быть отклонены. –