Skip to content

Header size exception when frame max is negotiated to 0 #407

Closed
@lau-sch

Description

@lau-sch

We started facing errors when trying to publish messages after our upgrade to latest client library:

java.lang.IllegalArgumentException: Content headers exceeded max frame size: 47 > 0
	at com.rabbitmq.client.impl.AMQCommand.transmit(AMQCommand.java:115)
	at com.rabbitmq.client.impl.AMQChannel.quiescingTransmit(AMQChannel.java:447)
	at com.rabbitmq.client.impl.AMQChannel.transmit(AMQChannel.java:423)
	at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:704)
	at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:679)
	at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:669)
	at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.basicPublish(AutorecoveringChannel.java:192)
	at com.company.RabbitAppender.append(...)
	at ch.qos.logback.core.AppenderBase.doAppend(AppenderBase.java:82)
	at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
	at net.logstash.logback.appender.DelegatingAsyncDisruptorAppender$DelegatingEventHandler.onEvent(DelegatingAsyncDisruptorAppender.java:54)
	at net.logstash.logback.appender.DelegatingAsyncDisruptorAppender$DelegatingEventHandler.onEvent(DelegatingAsyncDisruptorAppender.java:50)
	at net.logstash.logback.appender.AsyncDisruptorAppender$EventClearingEventHandler.onEvent(AsyncDisruptorAppender.java:330)
	at net.logstash.logback.appender.AsyncDisruptorAppender$EventClearingEventHandler.onEvent(AsyncDisruptorAppender.java:318)
	at net.logstash.logback.encoder.com.lmax.disruptor.BatchEventProcessor.processEvents(BatchEventProcessor.java:168)
	at net.logstash.logback.encoder.com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:125)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

This is used to send Logstash/SLF4J log statements to Rabbit, we have control over the ConnectionFactory and we don't set frame max, leaving it as 0 (no limit). These errors appeared when upgrading the client lib from 5.0.0 to 5.4.1.

Apparently it was caused by the fix of this issue, since on this line it checks the frameMax for zero, but 3 lines below it still uses original frameMax to check large headers, causing the exception above.

RabbitMQ 3.7.4
Erlang 20.2.3
Java 1.8.0_181
RabbitMQ client 5.4.1

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions