2017-02-13 2 views
0

В настоящее время я нажимаю сообщения из пользовательской системы через библиотеку python Stomp.py в экземпляр ActiveMQ. Это не удается, если я предоставляю словарь с настраиваемыми заголовками в качестве параметра «заголовки» в команде отправки.Ошибка отправки Stomp.py с настраиваемыми заголовками

destination = self.subscription_id.queue_name 
# Connect to the server 
conn.connect(username=$username, 
      password=$password, 
      headers={}) 
# Send the actual message out 
conn.send(destination, self.body, headers=self.header) 
conn.disconnect() 

По какой-то причине, заголовок не может снабдив меня с этой ошибкой:

ValueError: dictionary update sequence element #0 has length 1; 2 is required 

Последняя часть трассировки стека:

File "/custom_addons/activemq_message.py", line 124, in send_to_queue 
conn.send(destination, self.body, headers=self.header) 

File "/usr/local/lib/python2.7/dist-packages/stomp/protocol.py", line 151, in send 
headers = utils.merge_headers([headers, keyword_headers]) 

File "/usr/local/lib/python2.7/dist-packages/stomp/utils.py", line 166, in merge_headers 
headers.update(header_map) 

Это независимо от whereter или нет, я на самом деле предоставить что-нибудь в словаре или просто отправить пустую.

Он также независим от меня, предоставляя заголовки на уровне соединения или отправляя (или оба).

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

Любые подсказки будут оценены.

ответ

0

Обнаружена причина, в какой-то другой части кода заголовок был сохранен в поле строки. Затем он пытается отправить юникод вместо словаря.

Поскольку я не мог отредактировать источник, я использовал метод модуля «ast» module literal_eval для преобразования юникода в словарь и он работает.

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