在 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 中实现后台服务的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章