【问题标题】:Restrict the size of message in ActiveMQ Artemis在 ActiveMQ Artemis 中限制消息的大小
【发布时间】:2020-06-15 22:30:36
【问题描述】:

我想将尝试在 artemis 主题中发布 mqtt 消息的用户限制为 800 KB 的消息大小,为此我已使用

更新了 theetc/broker.xml 中的地址设置
<max-size-bytes>800</max-size-bytes>
<page-size-bytes>800</page-size-bytes>

这似乎不起作用,我可以通过 MQTT 客户端发布 1 MB 消息。

【问题讨论】:

    标签: mqtt activemq-artemis


    【解决方案1】:

    max-size-bytes 设置适用于地址,而不是消息。此外,这个没有符号的设置被解释为字节(尽管可以使用其他字节符号,例如MBkb 等)。因此,设置&lt;max-size-bytes&gt;800&lt;/max-size-bytes&gt; 将告诉代理在匹配地址中的总字节数为800 时强制执行相应的address-full-policy(默认为PAGE)。正如the documentation 所说,max-size-bytes 是:

    ...地址在进入页面模式之前可以拥有的最大内存。

    这里支持几种不同的策略/模式。除了PAGE,代理还支持FAILDROPBLOCK。有关这些的更多详细信息,请参阅the documentation

    如果您想严格根据消息大小排除消息,我建议您实施 MQTT interceptor。确保您使用的是至少 2.12.0,以便您可以修复 this issue

    【讨论】:

    • 这太棒了,拦截器在我的情况下工作。有没有办法在拦截器中传递运行时参数?就我而言,我想保持消息的大小可配置,如果超过,拦截器将排除它。
    • 您可以定义 Java 系统属性(例如在 etc/artemis.profile 中),然后在您的拦截器中检索这些值。
    猜你喜欢
    • 1970-01-01
    • 2019-04-02
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多