Python 到 ActiveMQ 的 Stomp 连接有错误的主题名称
Python Stomp connection to ActiveMQ has wrong Topic Name
我正在尝试形成对 ActiveMQ 服务器的 Python + Stomp 订阅。我正在针对本地主机上的 ActiveMQ 服务器进行测试。一切似乎都正常,只是主题 XYZ
的订阅名称被命名为 ActiveMQ.Advisory.Consumer.Queue.XYZ
,而我要连接的队列(由 java 客户端创建)被命名为 仅XYZ
.
有没有办法订阅这个 "short" 名称队列?
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控制台显示"Topic":
而真实服务器有一个简称队列:
这看起来像是为了支持 "advisory messages" 的正常经纪人行为。它不应该对您的应用程序有任何直接影响。有关详细信息,请参阅 ActiveMQ documentation on this subject。
终于回到这个问题了...看了一些其他的例子后,我猜到了一个答案,经过测试,成功了(呸!)。以前我可以看到我自己的消息,但是目标订阅者(写在java)从来没有收到我的消息。
如果你想用当前的stomp库发送到现有的ActiveMQ队列,队列名需要加上前缀/topic/
。例如(根据我的问题)如果你想发送到名为 XYZ
的队列,stomp 发送代码需要使用目的地 /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,还是适用于其他消息系统风格。
我正在尝试形成对 ActiveMQ 服务器的 Python + Stomp 订阅。我正在针对本地主机上的 ActiveMQ 服务器进行测试。一切似乎都正常,只是主题 XYZ
的订阅名称被命名为 ActiveMQ.Advisory.Consumer.Queue.XYZ
,而我要连接的队列(由 java 客户端创建)被命名为 仅XYZ
.
有没有办法订阅这个 "short" 名称队列?
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控制台显示"Topic":
而真实服务器有一个简称队列:
这看起来像是为了支持 "advisory messages" 的正常经纪人行为。它不应该对您的应用程序有任何直接影响。有关详细信息,请参阅 ActiveMQ documentation on this subject。
终于回到这个问题了...看了一些其他的例子后,我猜到了一个答案,经过测试,成功了(呸!)。以前我可以看到我自己的消息,但是目标订阅者(写在java)从来没有收到我的消息。
如果你想用当前的stomp库发送到现有的ActiveMQ队列,队列名需要加上前缀/topic/
。例如(根据我的问题)如果你想发送到名为 XYZ
的队列,stomp 发送代码需要使用目的地 /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,还是适用于其他消息系统风格。