我有ActiveMQ和HTTP rest服务。我需要从队列中读取消息并将其发送到http服务。如果http代码为200,则从队列中删除该消息。可以通过自定义service/daemon来完成。
我有一个想法来解决Apache Camel。这可能吗?我找到了一些基本路线的样本。但是我只需要在http服务成功处理后才需要删除消息。
是的,这对于Camel来说是可能的。
如果您只需要转发消息,Camel路由非常简单。
您可以使用JMS-或ActiveMQ-Consumer来消费消息,并使用基本的HTTP生产者或更具体的REST生产者将它们发送到HTTP端点。
如果配置消费者使用Broker事务,错误部分几乎是免费完成的。使用代理事务,当处理路由没有错误时,Camel会自动提交消息。这意味着它们在代理上被删除。.
如果路由有错误(例如HTTP发送错误)消息没有提交,因此(立即)由Broker重新发送并由应用程序重新处理。
正如评论中大致描述的那样,您可以使用errorHandler
(基本上也是Camel路由)来告诉Camel在错误情况下应该做什么。通常,您必须管理故障计数,并将x个错误之后的消息移动到错误队列中,以便进行进一步分析。否则,您的处理将被阻塞(并且繁忙),因为它会无限期地重新处理一个总是失败的消息。