[rabbitmq-discuss] UNEXPECTED_FRAME - expected content header for class 60, got non content header frame instead

Michael Klishin mklishin at gopivotal.com
Mon Apr 21 22:54:54 BST 2014

On 22 April 2014 at 01:41:11, xeon Mailinglist (xeonmailinglist at gmail.com) wrote:
> > Is it because of incompatible versions in python plugins and  
> rabbitmq?

The issue is with concurrent publishing on the same channel. Channels should
not be shared between threads/etc.

For every publish you do, your client sends at least 2 frames on the wire:

[basic.publish method][content header][payload]*

RabbitMQ expects frames to arrive in this order. With concurrent publishing on the same
channel, frames can get interleaved like so:

[basic.publish method 1][content header 1][basic.publish method 2][content header 2][payload 1][payload 2]

or get interleaved with other protocol methods, e.g. basic.consume in your case.

I’m not familiar with Celery enough to tell how to resolve this. Using a connection
or at least channel per multiprocessing “thread” should help. 

Software Engineer, Pivotal/RabbitMQ

More information about the rabbitmq-discuss mailing list