Apache Camel 从 ActiveMQ 路由到 HTTP 服务
Apache Camel route from ActiveMQ to HTTP service
我有 ActiveMQ 和 HTTP rest 服务。
我需要从队列中读取一条消息并将其发送到 http 服务。如果 http 代码 200 - 从队列中删除消息。可以通过自定义 service/daemon.
来完成
我有一个想法可以用 Apache Camel 来解决。这可能吗?
我找到了基本路由的样本。但是只有在http服务成功处理后我才需要删除消息。
是的,Camel 可以做到这一点。
如果只是转发消息,Camel路由很简单
您可以使用 JMS- or ActiveMQ-Consumer to consume messages and either a basic HTTP producer or a more specific REST producer 将它们发送到 HTTP 端点。
如果您配置消费者使用 Broker 交易,错误部分几乎是免费完成的。对于代理事务,当处理路由没有错误时,Camel 会自动提交消息。这意味着,它们 在代理上被删除 。
如果路由有错误(例如发送时出现 HTTP 错误),则消息不会提交,因此(立即)由 Broker 重新传送并由您的应用程序重新处理。
正如评论中大致描述的那样,您可以使用 errorHandler
(基本上也是 Camel 路由)来告诉 Camel 在错误情况下该怎么做。通常,您必须管理失败计数并将 x 个错误后的消息移至错误队列以供进一步分析。否则你的处理将被无限期地重新处理一条一直失败的消息而被阻止(和忙碌)。
我有 ActiveMQ 和 HTTP rest 服务。 我需要从队列中读取一条消息并将其发送到 http 服务。如果 http 代码 200 - 从队列中删除消息。可以通过自定义 service/daemon.
来完成我有一个想法可以用 Apache Camel 来解决。这可能吗? 我找到了基本路由的样本。但是只有在http服务成功处理后我才需要删除消息。
是的,Camel 可以做到这一点。
如果只是转发消息,Camel路由很简单
您可以使用 JMS- or ActiveMQ-Consumer to consume messages and either a basic HTTP producer or a more specific REST producer 将它们发送到 HTTP 端点。
如果您配置消费者使用 Broker 交易,错误部分几乎是免费完成的。对于代理事务,当处理路由没有错误时,Camel 会自动提交消息。这意味着,它们 在代理上被删除 。
如果路由有错误(例如发送时出现 HTTP 错误),则消息不会提交,因此(立即)由 Broker 重新传送并由您的应用程序重新处理。
正如评论中大致描述的那样,您可以使用 errorHandler
(基本上也是 Camel 路由)来告诉 Camel 在错误情况下该怎么做。通常,您必须管理失败计数并将 x 个错误后的消息移至错误队列以供进一步分析。否则你的处理将被无限期地重新处理一条一直失败的消息而被阻止(和忙碌)。