我正在使用 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