在春季应用程序中,我想做一些后台计算。任务是我保存一个实体(比如说 GPS 坐标),然后我想查询 Web 服务以获取所有坐标之间的距离并将它们存储在数据库中以供以后使用。存储实体后,有可能无法连接到将用于计算距离的 Web 服务。
我认为这可以通过在系统中引入一个作业(比如 cron 作业)来完成。一旦我们希望在后台发生某些事情,我们就会将其放入作业队列中。队列将尝试执行它收到的第一个作业,作业将连接到 Web 服务,如果由于某种原因失败,它会保留在队列中并告诉队列它失败了。然后,队列可以在指定的重试时间后执行。当作业成功完成时,将从作业队列中取出。
我很清楚需求,但我不确定该使用哪种技术。 JMX、JMS、Spring 任务调度程序、Spring 集成、混合/匹配或全部。
这看起来类似于如何在spring webapp中创建后台进程? https://stackoverflow.com/questions/1939229/how-to-create-background-process-in-spring-webapp但不完全是
Edit让我们进一步添加一点。还可以为每个 CSV 文件批量添加这些 GPS 坐标(通过 CSV 文件),每个条目都将在文件中进行处理(顺序将是先到先得的文件和每个条目)。删除情况可以更简单,因为预计不会删除任何内容(但可以稍后处理)
如果您“仅”需要异步执行,那么建议的 JMS 方法duffymo https://stackoverflow.com/users/37213/duffymo绝对是一个很好的解决方案(消息传递有保证,它是容错的,事务性的,等等)。但是,如果失败,消息将被回滚并立即地交付,除非您配置再次投递延迟 and a 再次投递限制。但是,虽然一些 JMS 提供商确实提供了此类功能(例如 MQ、WebLogic、JBoss),但据我所知,这并不是一个标准功能(例如,GlassFish OpenMQ 不提供此功能)。你需要考虑到这一点。
另一种方法是使用调度程序(特别是如果您还想延迟或安排作业执行) - 我在这里考虑使用 Quartz - 并在失败时重新安排作业(Quartz 完全支持这一点)。 Spring 还提供了 Quartz 的良好集成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)