Closed
Description
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