我有一个带有控制器方法的 Grails 应用程序(版本 2.2.4),该控制器方法“记录”对外部 Web 服务的所有请求(JSON over HTTP - 单向消息,不需要响应)。我想将控制器方法与直接/同步调用 Web 服务分离,并提供一个简单的“队列”,如果 Web 服务不可用,它可以存储调用,然后在服务再次备份时发送它们。
这听起来很适合某种 JMS 解决方案,但我没有任何使用 JMS 的经验(因此学习曲线可能是一个问题)。我应该使用其中一个可用的消息插件,还是对于我的简单要求来说太过分了?我不想要一个单独的消息应用程序,它必须嵌入到我的 web 应用程序中,我更喜欢小而简单的东西而不是更复杂和健壮的东西(所以欢迎关于哪个插件的建议)。
另一种方法是自己实现异步服务并将“消息”在数据库中排队(通过 Quartz 作业读取它们)或使用 java.util.concurrent.ConcurrentLinkedQueue 之类的东西?
编辑:另一种方法可能是将 log4j 与设置为 AsyncAppender 的自定义附加程序一起使用。