как контролировать размер кадра в топологии Hub / Spoke - PullRequest
0 голосов
/ 28 марта 2019

У меня возникают ошибки на 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&amp;wireFormat.maxFrameSize=104857600" />
        <transportConnector uri="vm://local"/>
    </transportConnectors>

Стандартный ответ для исправления этой ошибки - увеличить maxFrameSize.

Если возможно, я бы лучше попытался уменьшить размер отправляемого кадра, чтобы сохранить память спица.

Не ясно, что такое фрейм, поэтому я не могу принять решение о том, как решить эту проблему.

Может кто-нибудь уточнить, что мне нужно учитывать, чтобы принять решение по исправлению.

Редактировать - дополнительное мышление Насколько я понимаю, Hub-брокер пытается отправить сообщения Spoke-брокеру и достигает предела 100 МБ транспортного соединителя.

Давайте скажем, что я позволю 1 ГБ течь в сторону Спика, как это повлияет на систему Спика? Я предполагаю, что поток будет не маршализованным, и сообщения будут отправлены адресатам. Затем сообщения будут храниться в памяти, если это позволяет предел адресатов (в моем случае это не более 100 МБ памяти), или они будут сохранены во временном хранилище, а затем будут сохранены в журнале.

Сколько памяти мне нужно, чтобы Spoke не падал?

1 Ответ

0 голосов
/ 02 апреля 2019

Память не является проблемой для activemq, размер дисков является ограничением в соответствии с их документацией http://activemq.apache.org/how-do-i-configure-activemq-to-hold-100s-of-millions-of-queue-messages.html

ActiveMQ не ограничен доступностью памяти, но размером диска, доступного длядержать постоянные сообщения.

Обновление maxFrameSize - это решение

...