首页 > 解决方案 > 如何更改 ActiveMQ Artemis 中的 minLargeMes​​sageSize?

问题描述

我有一个 ActiveMQ Artemis 2.5 的集群环境。其中一位消费者无法使用 Artemis JMS 客户端 jar,因此它使用 ActiveMQ 5.11 (Java 1.7) 的客户端库来读取消息。这适用于小消息。出于某种原因,如果大消息被分块(和流式传输),消费者(第 3 方产品)将无法读取它们。在之前使用 HornetQ 的环境中,我们已经成功地处理了大量消息。

所以我的想法是通过更改一些参数来找到解决方法。但我没有任何成功。限制为 100 KiB。如何将此限制更改为 5 MB?我可以在某个队列上设置允许的 MessageType 吗?只有文本消息/字节消息?

我不希望 Artemis 将 5 MB 以下的消息视为大。TextMessage、ByteMessage 应该没问题。不是 StreamMessage,因为它似乎不受支持。

我见过这样的设置:JMS Bridge: min-large-message-size 在消息被认为是大之前限制。默认 100KB 集群连接类型:

min-large-message-size 大于这个的消息被认为是大消息,默认=100KB

我会在客户端更改它吗,例如:从手册(我在哪里执行此操作以及如何操作?它也是一个集群)

使用 JMS

如果使用 JNDI 实例化和查找连接工厂,则在 JNDI 上下文环境中配置最小大消息大小,例如jndi.properties. 这是一个使用默认情况下在上下文中可用的“ConnectionFactory”连接工厂的简单示例:

java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
connectionFactory.myConnectionFactory=tcp://localhost:61616?minLargeMessageSize=250000

如果直接实例化连接工厂,则最小大消息大小由 指定ActiveMQConnectionFactory.setMinLargeMessageSize

配置核心客户端

任何大于特定大小的消息都被视为大消息。大消息将被拆分并以片段的形式发送。这是由 URL 参数决定的minLargeMessageSize


笔记

Apache ActiveMQ Artemis 消息使用每个字符 2 个字节进行编码,因此如果消息数据用 ASCII 字符(1 个字节)填充,则生成的 Apache ActiveMQ Artemis 消息的大小大约会加倍。这在计算“大”消息的大小时很重要,因为它可能看起来小于minLargeMessageSize发送之前的大小,但一旦编码,它就会变成“大”消息。

默认值为 100KiB。


直接从客户端配置传输将提供有关如何实例化核心会话工厂或 JMS 连接工厂的更多信息。

标签: activemq-artemis

解决方案


推荐阅读