Azure / qpid-proton-j-extensions maxframesize将邮件大小限制为4KB

时间:2019-04-24 08:20:50

标签: java azure service bus

Azure / qpid-质子-j-延伸 如果目标缓冲区小于消息流,则WebSocketHandlerImpl会引发异常,该消息流似乎已硬编码为4KB,加上一些标头信息... 从我读过的蔚蓝服务总线上可以看到的消息最大为256KB,1MB为高级消息,再加上64KB标头

无论如何,我们可以将其升级到256KB吗?

WebSocketHandlerImpl:
 dstBuffer.clear();
            if (dstBuffer.capacity() >= webSocketFrame.size()) {
                dstBuffer.put(webSocketFrame.toByteArray());
            } else {
                throw new OutOfMemoryError("insufficient output buffer size");
            }
        } else {

WebSocketImpl:
  private int maxFrameSize = (4 * 1024) + (16 * WebSocketHeader.MED_HEADER_LENGTH_MASKED);

1 个答案:

答案 0 :(得分:0)

根据下面的源代码WebSocketHandlerImpl.java#L90,我认为您在理解带有变量dstBuffer.capacity() >= webSocketFrame.size()的代码webSocketFrame时犯了一个错误。

// Auto growing buffer for the WS frame, initialized to minimum size
ByteArrayOutputStream webSocketFrame = new ByteArrayOutputStream(WebSocketHeader.MIN_HEADER_LENGTH_MASKED + dataLength);

尚未对webSocketFrame变量进行固定大小的硬编码,这是具有自动增长缓冲区的ByteArrayOutputStream对象。但是,dstBuffer变量是一个ByteBuffer对象,具有固定大小的有效负载和websocket标头,请参阅测试代码WebSocketHandlerImplTest.java,如下所示。

// public void testWrapBuffer_short_payload() {
// L296
int payloadLength = 100;
int messageLength = payloadLength + WebSocketHeader.MIN_HEADER_LENGTH_MASKED;

// L305
ByteBuffer srcBuffer = ByteBuffer.allocate(payloadLength);
ByteBuffer dstBuffer = ByteBuffer.allocate(messageLength);

// And others functions testWrapBuffer_xxxx_payload