我有一个Grails应用程序(版本2.2.4),其控制器方法将所有请求“记录”到外部Web服务(基于HTTP的JSON - 单向消息,不需要响应)。我希望将控制器方法与直接/同步调用Web服务分离,并提供一个简单的“队列”,如果Web服务不可用,它可以存储调用,然后在服务重新启动后发送它们。
这听起来非常适合某种JMS解决方案,但我没有任何使用JMS的经验(因此学习曲线可能是一个问题)。我应该使用available messaging plugins中的一个还是因为我的简单要求而过度杀戮?我不想要一个单独的消息传递应用程序,它必须嵌入我的webapp中,我更喜欢小而简单的东西,而不是更复杂和健壮(所以欢迎使用哪个插件的建议)。
另一种方法是自己实现异步服务并将数据库中的“消息”排队(通过Quartz作业读取)或者像java.util.concurrent.ConcurrentLinkedQueue?
编辑:另一种方法可能是使用log4j并将自定义appender设置为AsyncAppender。
答案 0 :(得分:0)
另一种方法是自己实现异步服务并将数据库中的“消息”排队(通过Quartz作业读取它们)
我继续尝试这种方法。这是非常直接的,最后只是一个“屏幕”长度的代码。我使用失败的Web服务端点以及应用程序重启(崩溃)测试了它,并且它处理了两者。我使用单个服务类来持久保存消息(Grails域类)并刷新队列(由Quartz调度程序触发),该队列读取数据库并触发Web服务调用,当Web服务返回200状态代码时删除数据库实体