activemq-artemis - 如何更改 ActiveMQ Artemis 中的 minLargeMessageSize?
问题描述
我有一个 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 连接工厂的更多信息。
解决方案
推荐阅读
- javascript - 如何在活动嵌套手风琴部分上旋转箭头/雪佛龙/插入符号
- unit-testing - 测试条件时的 Mockito、TooManyActualInvocations Spek 框架
- smtp - 是否有来自 Gmail 的电子邮件服务?
- excel - 从未读电子邮件中复制数据并标记为已读
- php - 刷新页面时如何从控制器获取数据?
- c++ - 如何将 constexpr 数组传递给函数
- python - 如何删除不是数字的列表项?
- jmeter - jmeter 汇总报告中的总计
- c# - 使用 linq to entity 通过 SQL Query 将值存储到对象的对象中
- smalltalk - SortedCollection 忽略字符串中的大小写