如何更改调度策略
常见问题解答 > 使用 Apache ActiveMQ Classic > 如何更改调度策略
在 ActiveMQ Classic 4.0 中,这更加简单且功能更强大 - 您可以在 xml 配置文件中配置不同的 调度策略。
目前,在 ActiveMQ Classic 3.x 中,我们有一个 PrefetchPolicy 配置。这允许在确认之前将一定数量的消息调度到消费者。此功能旨在实现高性能;值越大,客户端等待消息到达以进行处理的可能性越小,因此吞吐量越高。
例如,在繁忙系统的重负载下,您可能希望将大约 1000 条消息调度到消费者,以便一旦消费者准备好接收消息,就会有一堆消息在内存中等待使用 - 而不是每次都进行缓慢的请求-响应 RPC。
但是,这种效果是,当您发送少量消息时,它们往往会全部发送到一个消费者,除非您有很多消息。请注意,在 4.x 中可以避免此问题,因为现在有一个可配置的 DispatchPolicy,因此您可以强制执行,例如,循环调度策略,以确保消息公平地调度以避免此问题。
在 ActiveMQ Classic 3.x 或更高版本中,解决此问题的解决方法是在 ConnectionFactory/Connection 上重新配置 PrefetchPolicy,以便代理每个消费者只预取一条消息;尽管这会大大降低系统的性能和吞吐量。
在 ActiveMQ Classic 4.x 中配置调度策略
在 AMQ 4.x 中,现在可以在 xml 配置文件(即 activemq.xml)上配置调度策略,即:
<destinationPolicy>
<policyMap><policyEntries>
<policyEntry topic="COMMAND.>">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<noSubscriptionRecoveryPolicy />
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries></policyMap>
</destinationPolicy>