У меня возникают ошибки на Spoke, когда я отказываюсь принимать сообщения, отправленные с концентратора:
java.io.IOException: размер кадра на 1 ГБ больше максимально допустимого 100 МБ
Редактировать: Полная трассировка стека в соответствии с запросом @ JustinBertram
2019-03-22T13:15:11.821+01:00 | DEBUG | 0.33:59110@61616 | Transport | ivemq.broker.TransportConnection 231 | 167 - org.apache.activemq.activemq-osgi - 5.11.0.redhat-630262 | Transport Connection to: tcp://1.2.3.4:56789 failed: java.io.IOException: Frame size of 1 GB larger than max allowed 100 MB
java.io.IOException: Frame size of 1 GB larger than max allowed 100 MB
at org.apache.activemq.util.IOExceptionSupport.createFrameSizeException(IOExceptionSupport.java:52)[167:org.apache.activemq.activemq-osgi:5.11.0.redhat-630262]
at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:261)[167:org.apache.activemq.activemq-osgi:5.11.0.redhat-630262]
at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221)[167:org.apache.activemq.activemq-osgi:5.11.0.redhat-630262]
at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213)[167:org.apache.activemq.activemq-osgi:5.11.0.redhat-630262]
at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)[167:org.apache.activemq.activemq-osgi:5.11.0.redhat-630262]
at java.lang.Thread.run(Thread.java:748)[:1.8.0_191]
Разговорный сетевой разъем
<networkConnector name="SPOKE-TO-HUB" uri="static:(tcp://hub:61616)" duplex="true" networkTTL="5" decreaseNetworkConsumerPriority="true" bridgeTempDestinations="false" userName="..." password="..."/>
Транспортные разъемы Spoke и Hub (порт будет 61616)
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:0?maximumConnections=1000&wireFormat.maxFrameSize=104857600" />
<transportConnector uri="vm://local"/>
</transportConnectors>
Стандартный ответ для исправления этой ошибки - увеличить maxFrameSize.
Если возможно, я бы лучше попытался уменьшить размер отправляемого кадра, чтобы сохранить память спица.
Не ясно, что такое фрейм, поэтому я не могу принять решение о том, как решить эту проблему.
Может кто-нибудь уточнить, что мне нужно учитывать, чтобы принять решение по исправлению.
Редактировать - дополнительное мышление
Насколько я понимаю, Hub-брокер пытается отправить сообщения Spoke-брокеру и достигает предела 100 МБ транспортного соединителя.
Давайте скажем, что я позволю 1 ГБ течь в сторону Спика, как это повлияет на систему Спика?
Я предполагаю, что поток будет не маршализованным, и сообщения будут отправлены адресатам.
Затем сообщения будут храниться в памяти, если это позволяет предел адресатов (в моем случае это не более 100 МБ памяти), или они будут сохранены во временном хранилище, а затем будут сохранены в журнале.
Сколько памяти мне нужно, чтобы Spoke не падал?