我是 ActiveMQ 的新手。我将它(和 Apache Camel)用于最终与 Web 服务通信的批处理。
我的问题是 ActiveMQ 如何控制它真正的异步程度?换句话说,如果它可以同时处理 20 条消息,但瓶颈是另一端的 Web 服务,我该如何控制呢?我可以减慢 ActiveMQ 的速度吗?
谢谢!
我是 ActiveMQ 的新手。我将它(和 Apache Camel)用于最终与 Web 服务通信的批处理。
我的问题是 ActiveMQ 如何控制它真正的异步程度?换句话说,如果它可以同时处理 20 条消息,但瓶颈是另一端的 Web 服务,我该如何控制呢?我可以减慢 ActiveMQ 的速度吗?
谢谢!
如果您使用的是 apache camel 2.4+,您可以使用带有 camel 的节流器来控制到端点的消息流 - 您可以从 camel 2.8 开始动态更改限制 - 希望它有所帮助。
骆驼节流阀将是一个很好的解决方案。但是,它确实将消息保存在当时的 Camel 应用程序的内存中。然而,它允许精确反应。
另一种选择是您可以在 Camel ActiveMQ JMS 使用者上配置的限制飞行中路由策略。可以使用上限/下限水位线设置配置该策略。然后该策略将相应地自动暂停/恢复 AMQ 消费者。您可以扩展此逻辑并改用您的自定义指标。
您可以在此处阅读有关此政策的信息:http: //camel.apache.org/routepolicy
这种方法不会在内存中保留任何消息,因为它将在 AMQ 消费者端控制以暂停/恢复它以“限制”流。
您还可以设置预取限制,防止 AMQ 根据从客户端返回的 message_delivered 响应的数量将特定传输上的消息分派给其消费者。这是一个参考