весенняя интеграция и постоянные объекты - PullRequest
1 голос
/ 08 июля 2010

Я пытаюсь использовать пружинную интеграцию, чтобы отделить более продолжительное действие, чтобы быстрее вернуть ответ пользователю.

Запрос создает запись позиции 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);
}

1 Ответ

0 голосов
/ 09 июля 2010

Если вы можете избежать неприятностей, я бы также делегировал создание позиции второму потоку. Таким образом, обе части единицы работы могут происходить в одной транзакции, и вам не нужно беспокоиться об оркестровке.

  1. веб-нить: получить запрос
  2. веб-тема: отправить рабочее сообщение
  3. веб-нить: обратный ответ
  4. служебная нить: создать позицию
  5. служебная нить: обогатить позицию адресом

Без гарантий заказа от 3 до 4,5. Затем клиент может проверить, правильно ли была создана позиция, в отдельном запросе.

Важное соображение заключается в том, чтобы сделать работу идемпотентом, чтобы вы могли повторно отправить сообщение, если дела пошли на юг, не рискуя дублированием.

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