当代理达到配置的限制时,我想将我的ActiveMQ生产者配置为故障转移(我正在使用Stomp协议)。我想让消费者继续从超载的经纪人消费,有增无减。
阅读ActiveMQ文档后,当代理(内存或磁盘)达到其极限时,我似乎可以将ActiveMQ配置为完成少数几件事情中的一件:
producerFlowControl="true"减慢消息(通过阻塞发送)sendFailIfNoSpace="true"时抛出异常看起来,这些东西都不是为了触发生产者故障转移而设计的。当生产者无法连接时,它就会出现故障转移,但据我所知,当它无法发送时(例如,由于生产者流控制),它将失败。
那么,当代理达到极限时,我可以配置它来拒绝连接吗?还是我最好的选择是在生产者端检测速度减慢,并手动地重新配置我的生产者,以便在那个时候使用不同的代理?
谢谢!
发布于 2013-05-23 08:00:35
最好的选择是使用sendFailIfNoSpace,或者更好的sendFailIfNoSpaceAfterTimeout。这将向客户端抛出一个异常,然后客户端可以尝试在应用程序级别将消息重新发送给另一个代理(尽管您可以将此逻辑封装在Stomp库的顶部,并从代码中使用此facade )。虽然如果您的ActiveMQ设置是正确连接的,您的负载在生产和消费方面都应该或多或少地均匀分布在您的代理中,所以这个特性可能不会给您带来很大的开销。
如果您专注于快速消耗消息,并增加存储限制以平滑加载中的峰值,您可能会得到更好的结果。
https://stackoverflow.com/questions/16661586
复制相似问题