Web services 需要一个简单的消息传递或排队解决方案来登录到web服务

Web services 需要一个简单的消息传递或排队解决方案来登录到web服务,web-services,grails,message-queue,Web Services,Grails,Message Queue,我有一个Grails应用程序(版本2.2.4),它有一个控制器方法,可以“记录”到外部web服务的所有请求(HTTP上的JSON-单向消息,不需要响应)。我想将控制器方法与直接/同步调用web服务分离,并提供一个简单的“队列”,它可以在web服务不可用时存储调用,然后在服务再次备份后发送调用 这听起来很适合某种JMS解决方案,但我没有任何使用JMS的经验(所以学习曲线可能是个问题)。我应该使用其中的一个吗?或者对于我的简单需求来说,这是一种过度使用吗?我不想要一个单独的消息传递应用程序,它必须嵌

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

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

另一种方法是自己实现一个异步服务,并在数据库中对“消息”进行排队(通过Quartz作业读取消息),或者使用类似java.util.concurrent.ConcurrentLinkedQueue的东西

编辑:另一种方法是将log4j与设置为AsyncAppender的自定义appender一起使用

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


我继续尝试这种方法。这是非常直截了当的,最后只是一个“屏幕”长度的代码。我用一个失败的web服务端点和一个应用程序重启(崩溃)对它进行了测试,它处理了这两个问题。我使用一个服务类来持久化消息(Grails域类)和刷新队列(由Quartz scheduler触发),队列读取DB并触发web服务调用,当web服务返回200状态代码时删除DB实体。

如果应用程序崩溃,记录所有请求的方法是否必须保留队列。(从它停止的地方恢复?)不,这不是必要的,但是拥有它会很好。我们只是记录一些统计数据和用户详细信息,所以如果我们因为应用程序崩溃而丢失了一些消息,我们可以接受。我简单而有力的评论表明了这一点,但我本应明确指出。仅供参考,这一点很有帮助,但并未解决我的具体问题: