我正在尝试使用 spring 集成来解耦更长的运行操作,以更快地将响应返回给用户。
该请求在我们的数据库中创建了一个 gps 位置条目。我想做一个http请求,通过反向地理编码服务获取该gps位置的地址。这可能需要几秒钟,所以我想稍后/并行。
Spring Integration 对此非常有效,尽管我遇到的问题是,如果并行运行的服务要快,则在将位置条目保存在数据库中时会发生冲突。
是否有关于如何在 Spring Integration 中处理持久对象的最佳实践?我是否应该尝试锁定对象,直到处理主请求?
更新:
基本上我有两种方法来操作我的位置对象(伪 Java 代码):
一个在 MVC 控制器调用的服务类中:
void createPosition(float longitude, float latitude) {
Position position = new Position(longitude, latitude);
positionDao.save(position);
locationChannel.send(new GenericMessage<Position>(position));
}
并且位于由附加到 locationChannel 的 ServiceActivator 调用的 Service 类中:
void getAddressForPosition(Position) {
position.setAddress(/* get address via http request from openstreet or google */);
positionDao.save(position);
}