2014-09-16 2 views
0

Pika публикует сообщение об успехе, размер которого меньше 10 тыс. Байт, и он не удался, когда размер превышает 10 Кбайт.Pika basic_publish ошибка при публикации большого сообщения

Информация об ошибке, как показано ниже:

Error. Connection closed, and the message was never delivered. 
Traceback (most recent call last): 
    File "test_mq.py", line 28, in <module> 
    ret = test_mq.publish(test_str) 
    File "rbmq.py", line 146, in publish 
    ret = self._channel.basic_publish(exchange=self.exc, routing_key=self.rkey, body=body, properties=pika.BasicProperties(delivery_mode=2,)) 
    File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 521, in basic_publish 
    File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 1106, in _rpc 
    File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 218, in process_data_events 
pika.exceptions.ConnectionClosed 

код, как показано ниже:

def publish(self, body): 
     ret = False 
     try: 
      ret = self._channel.basic_publish(exchange=self.exc, routing_key=self.rkey, body=body, properties=pika.BasicProperties(delivery_mode=2,)) 
     except pika.exceptions.ConnectionClosed as exc: 
      print('Error. Connection closed, and the message was never delivered.') 
      self._reconnect() 
      ret = self._channel.basic_publish(exchange=self.exc, routing_key=self.rkey, body=body, properties=pika.BasicProperties(delivery_mode=2,)) 
      print("Try again ret: ", ret) 
     except Exception as e: 
      print ("PikaMQ publish really error ", e)    
     return ret 

test_str_fail = 49143 * 'a' 
test_str_ok = 9143 * 'a' 
ret = test_mq.publish(test_str_ok) #publish success 
ret = test_mq.publish(test_str_fail) #publish fail 

ответ

2

Я бы рекомендовал вам обновить Pika 0.9.14. Последняя версия исправила пару довольно крупных ошибок сокетов; включая тот, который вызывает вашу проблему.

Вы можете обновить до 0.9.14, используя Пипа:

pip install pika --upgrade

Это взято из еще не закончена changelog для 0.9.14.

Major issue with socket buffer refactor in 0.9.13 (#328) fixes by cooper6581 and Erik Andersson 

В качестве альтернативы, если по каким-то причинам вы не можете обновить 0.9.13 до 0.9.14 вы можете попробовать некоторые из альтернативных клиентов RabbitMQ для Python.

- Более полный список альтернатив pika доступен на официальном веб-сайте RabbitMQ here.

+0

Спасибо за список с жизнеспособными альтернативами. Я хотел бы добавить к нему [txAMPQ] (https://launchpad.net/txamqp). –

+0

Конечно, на самом деле это не было полным списком. Я в основном хотел предоставить ему несколько альтернатив, подобных пике, если он не сможет заставить его работать. – eandersson

 Смежные вопросы

  • Нет связанных вопросов^_^