如何在Python中配置ActiveMQ以使用STOMP

7 投票
3 回答
10662 浏览
提问于 2025-04-16 18:56

我在本地安装并运行了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 个回答

0

我今天也遇到了类似的问题。这是因为端口设置不正确。默认情况下,stomp会连接到61613这个端口。要么使用这个端口,要么更新你的代理服务器,让它支持其他端口。

0

我不知道直接的答案,这可能有点绕,但一个可能的方向是看看Celery的旧代码。他们以前通过carrot支持activemq/stomp(比如这个链接:http://jasonmbaker.com/how-celery-carrot-and-your-messaging-stack-wo)。我以为他们现在也支持,但看起来不再支持了(根据常见问题解答:http://ask.github.com/celery/faq.html#can-i-use-celery-with-activemq-stomp)。不过,他们之前确实做过你想要的事情,所以你可以看看旧的实现。可能需要花不少时间去研究,不确定找到答案有多难。我自己也很想知道有没有简单的答案。

6

乍一看,我觉得你可能是连接到了错误的端口。默认情况下,ActiveMQ 是设置在 61616 端口上使用 OpenWire 协议的,而 Stomp 协议是没有启用的。你需要检查一下你的 ActiveMQ 配置文件,确保 Stomp 传输是启用的。我们通常使用的 Stomp 端口是 61613。有关如何配置 Stomp 的一些信息,可以参考这个页面:ActiveMQ Stomp 指南

撰写回答