Я пытаюсь использовать пружинную интеграцию, чтобы отделить более продолжительное действие, чтобы быстрее вернуть ответ пользователю.
Запрос создает запись позиции GPS в нашей базе данных.Я хочу сделать запрос HTTP получить адрес этой позиции GPS с помощью служб обратного геокодирования.Это может занять пару секунд, поэтому я захочу сделать это позже / параллельно.
Spring Integration отлично подходит для этого, хотя проблема у меня заключается в том, что если служба параллельного запуска работает быстро, при сохранении возникает конфликтзапись позиции в базе данных.
Есть ли передовой опыт работы с постоянными объектами в Spring Integration?Стоит ли пытаться заблокировать объект до тех пор, пока не будет обработан основной запрос?
ОБНОВЛЕНИЕ:
В основном у меня есть два метода, которые управляют моим объектом позиции (псевдо-Java-код):
тот, который находится в классе Service, вызываемом контроллером MVC:
void createPosition(float longitude, float latitude) {
Position position = new Position(longitude, latitude);
positionDao.save(position);
locationChannel.send(new GenericMessage<Position>(position));
}
, и который находится в классе Service, вызываемом ServiceActivator, подключенным к locationChannel:
void getAddressForPosition(Position) {
position.setAddress(/* get address via http request from openstreet or google */);
positionDao.save(position);
}