在 Grails 中实现后台服务的最佳方式

Posted

技术标签:

【中文标题】在 Grails 中实现后台服务的最佳方式【英文标题】:The best way to implement a background service in Grails 【发布时间】:2011-03-27 01:43:52 【问题描述】:

我做了很多搜索,我知道 grails-executor 和 JMS 插件。我正在寻找有关实现长时间运行(只要应用程序正在运行)服务的最佳方法的建议,该服务在后台运行并接受阻塞队列上的输入。似乎有两种方法可以满足我的要求... 1. JMS(感觉过于笨重)和 2. 在监视队列的线程上运行的服务...当向其中添加某些内容时,它会对其进行处理然后等待下一个项目。此服务需要具有 GORM 功能,以便它可以创建/保存对象。我的偏好是在线程上启动某种类型的服务并使用阻塞队列......有人可以建议最好的方法吗?我是否应该只实现一个在 grails 引导时调用的类,并让该类使用 grails-executor 创建一个仅在后台运行的线程?如果有人在 grails 中使用过 jms 插件,它是否足够轻量级,我应该重新考虑我的立场?非常感谢任何和所有建议。我真的不拘泥于任何一种解决方案,所以所有想法都会被考虑并非常感谢。

提前致谢!

【问题讨论】:

【参考方案1】:

我将石英插件用于许多类似的“排队观看”功能。

【讨论】:

我想过 Quartz,但我希望该服务在应用程序运行时运行,而不是真正按计划运行。如果将石英作为“仅在启动时”选项,那么它可以工作 - 我只会让它启动一个在应用程序生命周期内存活的后台线程......我将研究它是否具有该选项。谢谢。 听起来你对石英的工作原理有点误解。是的,它按计划运行,但它是一项工作,它启动一项服务(在您的情况下是 Grails 服务)。所以每 5 分钟(或任何你选择的)它启动服务方法,然后你做任何你想做的事。它将继续这样做,直到您将其关闭。而你的应用程序的其余部分只是不停地插入很长一段时间。它不会等待石英工作做任何事情。它只是不断处理请求。【参考方案2】:

您可以改用 Spring 集成。使用石英,您必须开发入队逻辑,但使用弹簧集成,每件事都是预先开发的。

【讨论】:

以上是关于在 Grails 中实现后台服务的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

在 REST 服务中实现方法 OPTIONS 的最佳方式

JavaWeb中实现文件上传的方式有哪些?

问题:JavaWeb中实现文件上传的方式有哪些?

android - 在活动和后台服务之间进行通信的最佳方式

在 iOS 中实现长时间运行的后台任务

在后台将用户位置更新发送到服务器的最佳方式(Android)