2

当代理达到配置的限制时,我想将我的 ActiveMQ 生产者配置为故障转移(我正在使用 Stomp 协议)。我想让消费者继续从超载的经纪人那里消费,有增无减。

阅读 ActiveMQ 文档,看起来我可以将 ActiveMQ 配置为在代理达到其限制(内存或磁盘)时执行以下操作之一:

  1. producerFlowControl="true"使用(通过阻止发送)减慢消息
  2. 使用时抛出异常sendFailIfNoSpace="true"
  3. 以上都不是,在这种情况下..我不确定会发生什么?恢复到 TCP 流控制?

看起来这些东西都不是为了触发生产者故障转移而设计的。生产者在连接失败时将进行故障转移,但据我所知,当它发送失败时(例如,由于生产者流控制)。

那么,我是否可以将代理配置为在达到其限制时拒绝连接?或者我最好的选择是检测生产者方面的减速,并手动重新配置我的生产者以使用不同的代理?

谢谢!

4

1 回答 1

4

你最好的选择是使用sendFailIfNoSpace,或者更好sendFailIfNoSpaceAfterTimeout。这将向您的客户端抛出异常,然后客户端可以尝试将消息重新发送到应用程序级别的另一个代理(尽管您可以将此逻辑封装在 Stomp 库的顶部,并在您的代码中使用此外观)。尽管如果您的 ActiveMQ 设置正确连接,您的生产和消费负载应该或多或少均匀地分布在您的代理之间,因此此功能可能不会给您带来很多好处。

如果您专注于消息的快速消耗,并增加存储限制以消除负载峰值,您可能会获得更好的结果。

于 2013-05-23T08:00:35.730 回答