ActiveMQ - 限制订阅数量
ActiveMQ - limit number of subcriptions
我遇到一个问题,一个客户(错误地)订阅了同一主题 4000 多次(通过约 100 个连接)。这导致 ActiveMQ 资源非常低并且变得非常慢。
是否有某种机制可以防止这种情况发生?就像一个 client/user 最多可以订阅一个主题 X 次?
我不知道 ActiveMQ 5.x 中有任何功能可以提供您正在寻找的功能。
然而,ActiveMQ Artemis 有per-user resource limits。因此,如果您的经纪人是安全的,以至于客户必须使用用户名和密码(应该是)进行连接,那么您可以使用 broker.xml
:[=15 中的类似内容来强制执行 per-use 连接限制=]
<resource-limit-settings>
<resource-limit-setting match="myUser">
<max-connections>5</max-connections>
</resource-limit-setting>
</resource-limit-settings>
还值得注意的是,当消费者在主题上创建订阅时,会创建一个队列来保存订阅的所有消息。您可以使用 max-queues
配置参数限制用户可以创建的队列数量(以及订阅数量),例如:
<resource-limit-settings>
<resource-limit-setting match="myUser">
<max-queues>3</max-queues>
</resource-limit-setting>
</resource-limit-settings>
我遇到一个问题,一个客户(错误地)订阅了同一主题 4000 多次(通过约 100 个连接)。这导致 ActiveMQ 资源非常低并且变得非常慢。
是否有某种机制可以防止这种情况发生?就像一个 client/user 最多可以订阅一个主题 X 次?
我不知道 ActiveMQ 5.x 中有任何功能可以提供您正在寻找的功能。
然而,ActiveMQ Artemis 有per-user resource limits。因此,如果您的经纪人是安全的,以至于客户必须使用用户名和密码(应该是)进行连接,那么您可以使用 broker.xml
:[=15 中的类似内容来强制执行 per-use 连接限制=]
<resource-limit-settings>
<resource-limit-setting match="myUser">
<max-connections>5</max-connections>
</resource-limit-setting>
</resource-limit-settings>
还值得注意的是,当消费者在主题上创建订阅时,会创建一个队列来保存订阅的所有消息。您可以使用 max-queues
配置参数限制用户可以创建的队列数量(以及订阅数量),例如:
<resource-limit-settings>
<resource-limit-setting match="myUser">
<max-queues>3</max-queues>
</resource-limit-setting>
</resource-limit-settings>