我正在尝试对ActiveMQ服务器形成Python + Stomp订阅。我正在针对本地主机上的ActiveMQ服务器进行测试。似乎一切正常,除了主题XYZ
的订阅名称被命名为ActiveMQ.Advisory.Consumer.Queue.XYZ
,而我想连接的队列(由Java客户端创建)被命名为 only XYZ
。
有没有办法订阅这个“短”名称队列?
import stomp
QUEUE_NAME='XYZ'
class MyListener(stomp.ConnectionListener):
def on_error(self, headers, message):
print('received an error "%s"' % message)
def on_message(self, headers, message):
print('received a message "%s"' % message)
headers = {}
conn = stomp.Connection( )
conn.set_listener('127.0.0.1:61616', MyListener())
conn.start()
conn.connect('admin', 'admin', wait=True)
conn.subscribe(destination=QUEUE_NAME, id=2, ack='auto')
time.sleep(6660)
conn.disconnect()
答案 0 :(得分:2)
这看起来像正常的经纪人行为,以支持“建议消息”。它不会对您的应用程序产生任何直接影响。有关更多详细信息,请参见ActiveMQ documentation on this subject。
答案 1 :(得分:0)
最后回到了这个问题...阅读其他示例之后,我猜出了一个答案,进行了测试,并且有效(phe!)。以前我可以看到自己的消息,但是目标订户(用Java编写)从未收到我的消息。
如果要使用当前的脚踏库发送到现有的ActiveMQ队列,则队列名称需要以/topic/
为前缀。例如(根据我的问题),如果您想发送到名为XYZ
的队列,则踩脚发送代码需要使用/topic/XYZ
的目的地。 如果在某处有记录,我找不到它!
强制性代码段:
import time
import stomp
MQ_SERVER = "192.168.1.111"
MQ_PORT = 61613
MQ_USERNAME = "user"
MQ_PASSWORD = "pass"
MQ_QUEUENAME = 'XYZ'
conn = stomp.Connection( [( MQ_SERVER, MQ_PORT )] )
conn.start()
conn.connect( MQ_USERNAME, MQ_PASSWORD, wait=True )
for i in range( 3 ):
conn.send( body="Hello World", destination='/topic/'+MQ_QUEUENAME ) # <- HERE
time.sleep( 1 )
conn.disconnect()
我不确定这是仅用于ActiveMQ还是用于其他消息系统。