0

我有一个带有控制器方法的 Grails 应用程序(版本 2.2.4),该控制器方法“记录”对外部 Web 服务的所有请求(JSON over HTTP - 单向消息,不需要响应)。我想将控制器方法与直接/同步调用 Web 服务分离,并提供一个简单的“队列”,如果 Web 服务不可用,它可以存储调用,然后在服务再次备份时发送它们。

这听起来很适合某种 JMS 解决方案,但我没有任何使用 JMS 的经验(因此学习曲线可能是一个问题)。我应该使用其中一个可用的消息插件,还是对于我的简单要求来说太过分了?我不想要一个单独的消息应用程序,它必须嵌入到我的 web 应用程序中,我更喜欢小而简单的东西而不是更复杂和健壮的东西(所以欢迎关于哪个插件的建议)。

另一种方法是自己实现异步服务并将“消息”在数据库中排队(通过 Quartz 作业读取它们)或使用 java.util.concurrent.ConcurrentLinkedQueue 之类的东西?

编辑:另一种方法可能是将 log4j 与设置为 AsyncAppender 的自定义附加程序一起使用。

4

1 回答 1

0

另一种方法是自己实现异步服务并在数据库中排队“消息”(通过 Quartz 作业读取它们)

我继续尝试这种方法。它非常直截了当,最后只是“屏幕”长度的代码。我使用失败的 Web 服务端点以及应用程序重启(崩溃)对其进行了测试,并且两者都得到了处理。我使用单个服务类来保存消息(Grails 域类)并刷新队列(由 Quartz 调度程序触发)读取数据库并触发 Web 服务调用,当 Web 服务返回 200 状态代码时删除 DB 实体.

于 2013-11-15T22:36:22.867 回答