activemq как настроить работу с stomp в python

у меня установлен activemq и работает локально, но когда я запускаю следующий скрипт, я получаю сообщение об ошибке:


#!/usr/bin/env python

import time
import sys
import stomp

class MyListener(object):
    def on_error(self, headers, message):
        print 'received an error %s' % message
    def on_message(self, headers, message):
        print 'received a message %s' % message

conn = stomp.Connection(host_and_ports=[('localhost', 61616)])
conn.set_listener('', MyListener())
conn.start()
conn.connect()
conn.subscribe(destination='/home/bitcycle/svn/cass/queue.test', ack='auto')
conn.send('Test', destination='/home/bitcycle/svn/cass/queue.test')
time.sleep(2)
conn.disconnect()

ошибка:

./proc.py


No handlers could be found for logger "stomp.py"
Traceback (most recent call last):
  File "./proc.py", line 20, in 
    conn.disconnect()
  File "/usr/local/lib/python2.7/dist-packages/stomp.py-3.0.3-py2.7.egg/stomp/connect.py", line 387, in disconnect
    self.__send_frame_helper('DISCONNECT', '', utils.merge_headers([self.__connect_headers, headers, keyword_headers]), [ ])
  File "/usr/local/lib/python2.7/dist-packages/stomp.py-3.0.3-py2.7.egg/stomp/connect.py", line 453, in __send_frame_helper
    self.__send_frame(command, headers, payload)
  File "/usr/local/lib/python2.7/dist-packages/stomp.py-3.0.3-py2.7.egg/stomp/connect.py", line 489, in __send_frame
    raise exception.NotConnectedException()
stomp.exception.NotConnectedException

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

3 ответов


на первый взгляд я бы сказал, что вы пытаетесь подключиться к неверному порту. Из коробки ActiveMQ настроен на использование протокола OpenWire на порту 61616, а Stomp не включен. Вам нужно проверить файл конфигурации ActiveMQ и убедиться, что транспорт Stomp включен, стандартный порт, который мы используем, - 61613 для Stomp. См. эту страницу для получения информации о настройке Stomp:Руководство ActiveMQ Stomp


Я не знаю прямого ответа, и это может быть слишком окольным, чтобы быть полезным, но одним из путей может быть изучение старого кода сельдерея. Они использовали для поддержки activemq / stomp через морковь (например,http://jasonmbaker.com/how-celery-carrot-and-your-messaging-stack-wo) -- я думал, что они все еще делали, но похоже, что они больше не делают (согласно FAQ:http://ask.github.com/celery/faq.html#can-i-use-celery-with-activemq-stomp). Тем не менее, они сделали именно это то, что вы хотите некоторое время назад, чтобы вы могли потенциально посмотреть на более старую реализацию. Может быть, слишком много исследований - не уверен, насколько сложно получить ответ. Мне будет интересно узнать, есть ли простой ответ.


Я столкнулся с подобной проблемой сегодня. Это связано с неправильным портом. По умолчанию stomp будет подключаться к 61613. Используйте этот порт или обновите брокер для поддержки других портов.