0

我正在使用 Artemis 2.7.0.redhat-00056(我认为是 AMQ 5.11)

其中一条骆驼路线是很久以前建立的。它在队列中发送 XML,然后在 bean 中进行处理。

所以它使用 JMS 风格的代码:

    producer = session.createProducer(destination);
    producer.setDeliveryMode(DeliveryMode.PERSISTENT);
    ...
    TextMessage message = session.createTextMessage(xStream.toXML(corMessage));
    producer.send(message);

这在 99% 的时间里都有效,但今天我们开始得到:

    Caused by: java.lang.IndexOutOfBoundsException: Error reading in simpleString, length=6702096 is greater than readableBytes=963134
    at org.apache.activemq.artemis.api.core.SimpleString.readSimpleString(SimpleString.java:183)

除此之外,警告:

    AMQ212054: Destination address=... is blocked. If the system is configured to block make sure you consume messages on this configuration.

为了解决这个问题,我进入 docker 并检查了我们的 /amq/broker/data/large-messages 文件夹,并将所有这些文件移动到其他地方。它引发了一堆异常,但现在似乎正在传递新消息。

但我仍然收到 AMQ212054 'destination blocked' 警告。

那么,我该如何

a)摆脱警告

b) 解决这个问题?

我查看了文档,但我没有看到任何特别有用的东西。有一个minLargeMessageSize字段,但是设置它会有什么不同吗?那么我是否会在发送之前检查 XML 的大小,然后有一些 if/else 语句,以使用producer.send(message);或作为 ByteMessage 发送,如第 9.4/9.5 节,如果它是“大”消息?

编辑:(来自码头工人内部)

  ...
  <max-disk-usage>90</max-disk-usage>
  ...

[root@409a74d7eadd /]# df -h
Filesystem                              Size  Used Avail Use% Mounted on
/dev/mapper/docker-253:2-268789825-123   10G  2.8G  7.3G  28% /
tmpfs                                    64M     0   64M   0% /dev
tmpfs                                    12G     0   12G   0% /sys/fs/cgroup
/dev/mapper/centos-root                  36G   14G   23G  37% /temp
4

0 回答 0