После создания нового объекта «Заказ» я хотел бы получить его сгенерированный идентификатор и поместить его в очередь AMQP, чтобы рабочий мог делать с ним другие вещи. Рабочий принимает сгенерированный идентификатор (сообщение) и ищет порядок, но жалуется, что никакой записи не существует, хотя я только что создал ее. Я пытаюсь выяснить, как долго ждать, когда я вызову свой .perist(), прежде чем я поставлю сообщение (сгенерированный идентификатор) в очередь (что я не считаю хорошей идеей); иметь рабочий цикл снова и снова до тех пор, пока mysql не вернет запись (которой мне тоже не нравится); или найти точку, где я могу поместить сообщение в очередь после того, как я знаю, что данные безопасны в mysql (это звучит лучше всего). Я думаю, что это нужно сделать за пределами любого метода @Transactional.В какой момент можно доверять, что данные были сохранены в mysql?
Работник, который будет считывать данные из mysql, является частью другой системы на другом сервере. Итак, когда я могу сказать работнику, что данные находятся в mysql, чтобы он мог начать свою задачу?
Верно ли, что после завершения метода @Transactional данные записываются в mysql, у меня возникли проблемы с пониманием этого. Спасибо, миллион в продвинутом состоянии.
Операции с базой данных - довольно широкий предмет, но да, вы должны убедиться, что транзакция, которая записывает данные, закончилась, прежде чем вы попытаетесь прочитать ее из другой транзакции. Если, конечно, ваша изоляция транзакций не является «READ_UNCOMMITTED», но давайте не будем этого делать. – Kayaman
После того, как вы совершили транзакцию, все ваши действия будут сохранены и видны другим процессам, выполняющим свои транзакции. Если вы не используете READ_UNCOMMITTED в качестве уровня изоляции транзакции. – Ralf
мой вопрос больше связан с тем, что рабочий, который выбирает идентификатор заказа из очереди, является частью другой системы - извините, что забыл упомянуть в своем вопросе. плохо обновите это. – Dagron