如何控制Hub / Spoke拓扑中的帧大小

问题描述 投票:0回答:1

拒绝接受从Hub发送的消息时,我在Spoke上有错误:

java.io.IOException:帧大小比最大允许100 MB大1 GB

编辑:@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="..."/>

辐条和集线器传输连接器(端口将为61616)

    <transportConnectors>
        <transportConnector name="openwire" uri="tcp://0.0.0.0:0?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600" />
        <transportConnector uri="vm://local"/>
    </transportConnectors>

修复此错误的标准答案是增加maxFrameSize。

如果可能的话,我宁愿尝试减小调度帧的大小以保留Spoke内存。

目前尚不清楚框架是什么,因此我无法决定如何解决这个问题。

有人可以澄清我需要考虑什么来做出我的决定。

编辑 - 额外思考我的理解是Hub代理正在尝试向Spoke代理发送消息并达到传输连接器的100 MB限制。

让我们说我允许1 GB流向Spoke,这会对Spoke系统产生什么影响?我猜这个流将被解组,消息将被发送到目的地。然后,如果目标限制允许(在我的情况下最大内存为100Mb),消息将保留在内存中,或者它将保留在临时存储中,然后它将存储在日志中。

我需要多少内存才能确保Spoke不会崩溃?

activemq
1个回答
0
投票

内存不是activemq的问题,磁盘大小是根据他们的文档http://activemq.apache.org/how-do-i-configure-activemq-to-hold-100s-of-millions-of-queue-messages.html的限制

ActiveMQ不受内存可用性的限制,而是受可用于保存持久消息的磁盘大小的限制。

升级maxFrameSize是一种解决方案

© www.soinside.com 2019 - 2024. All rights reserved.