我有一个具有日记功能的ActiveMQ ARTEMIS的集群环境。由于其中一个消费者无法使用Artemis-JMS客户端jar,我使用ActiveMQ 5.11(Java 1.7)的客户端库来读取消息。这适用于小消息。由于某种原因,消费者(第三方产品)如果被分块(和流式传输),则无法读取大型消息。我们在之前的环境HornetQ中获得了大量消息的成功。
所以我的想法是通过更改一些参数找到解决方法。但我没有任何成功。限制为100 KiB(?)双字节。 如何将此限制更改为5 MB? 我可以设置certian队列中允许的MessageType吗?只有TextMessage / ByteMessage?
我不希望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://本地主机:61616 minLargeMessageSize = 250000 如果直接实例化连接工厂,则最小化 大邮件大小由。指定 ActiveMQConnectionFactory.setMinLargeMessageSize。
配置客户端
任何大于特定大小的邮件都被视为大邮件。 大邮件将被拆分并以片段形式发送。这是 由URL参数minLargeMessageSize
确定请注意
** Apache ActiveMQ Artemis消息使用每个2字节进行编码 如果消息数据填充了ASCII字符,则为字符 (这是1个字节)得到的Apache ActiveMQ Artemis的大小 消息大概加倍。这在计算时非常重要 “大”消息的大小,因为它可能看起来小于 minLargeMessageSize在发送之前,但它变成了一个 “大”消息一旦被编码。
默认值为100KiB。**
直接从客户端配置传输将提供 有关如何实例化核心会话工厂或JMS的更多信息 连接工厂。
非常适合您的想法。
/齐格