[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.
--
MK
Software Engineer, Pivotal/RabbitMQ
More information about the rabbitmq-discuss
mailing list