与ActiveMQ的Python Stomp连接具有错误的主题名称

时间:2019-04-11 06:44:03

标签: python activemq stomp

我正在尝试对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()

本地ActiveMQ控制台显示“主题”: Screenshot of ActiveMQ Topics panel

真实服务器有一个短名称队列: Correct Name

2 个答案:

答案 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还是用于其他消息系统。