使用 Stomp 订阅 ActiveMQ Artemis 时遇到问题。队列已存在
Trouble subscribing to ActiveMQ Artemis with Stomp. Queue already exists
我在这里做错了什么?我正在尝试使用 Stomp 来测试 Artemis 2.13.0 的某些内容,但是当我使用 Python 脚本的命令行实用程序时,我无法订阅队列,即使在我使用该实用程序之后也是如此将消息发布到地址。
此外,如果我给它一个新的队列名称,它会创建它,但不会拉取我发布给它的消息。这令人困惑。我的实际 Java 应用程序的行为与此完全不同——它使用的是 JMS
我与实用程序的连接是这样的:
stomp -H 192.168.56.105 -P 61616 -U user -W password
> subscribe test3.topic::test.A.queue
哪个给我这个错误:
Subscribing to 'test3.topic::test.A.queue' with acknowledge set to 'auto', id set to '1'
>
AMQ229019: Queue test.A.queue already exists on address test3.topic
这让我觉得 Stomp 在订阅时试图创建队列,但我在文档中看不到如何管理它。 http://jasonrbriggs.github.io/stomp.py/api.html
我也有一个 Python 脚本给了我同样的问题。
import os
import time
import stomp
def connect_and_subscribe(conn):
conn.connect('user', 'password', wait=True)
conn.subscribe(destination='test3.topic::test.A.queue', id=1, ack='auto')
class MyListener(stomp.ConnectionListener):
def __init__(self, conn):
self.conn = conn
def on_error(self, headers, message):
print('received an error "%s"' % message)
def on_message(self, headers, message):
print('received a message "%s"' % message)
"""for x in range(10):
print(x)
time.sleep(1)
print('processed message')"""
def on_disconnected(self):
print('disconnected')
connect_and_subscribe(self.conn)
conn = stomp.Connection([('192.168.56.105', 61616)], heartbeats=(4000, 4000))
conn.set_listener('', MyListener(conn))
connect_and_subscribe(conn)
time.sleep(1000)
conn.disconnect()
我建议您尝试 latest release of ActiveMQ Artemis. Since 2.13.0 was released a year ago a handful of STOMP related issues have been fixed specifically ARTEMIS-2817,它看起来像您的用例。
我不清楚 为什么 您使用完全限定队列名称 (FQQN),所以我倾向于认为这不是正确的方法,但无论您遇到什么问题,都应该在以后的版本中得到修复。如果您希望多个消费者共享单个订阅中的消息,那么使用 FQQN 将是一个不错的选择。
此外,如果您想使用 topic/
或 queue/
前缀来控制来自代理的路由语义,那么您应该适当地设置 anycastPrefix
和 multicastPrefix
作为the documentation.
中描述
这可能是巧合,但 ARTEMIS-2817 最初是由“BENJAMIN Lee WARRICK”报道的,它与“BenW”(即你的名字)惊人地相似。
我在这里做错了什么?我正在尝试使用 Stomp 来测试 Artemis 2.13.0 的某些内容,但是当我使用 Python 脚本的命令行实用程序时,我无法订阅队列,即使在我使用该实用程序之后也是如此将消息发布到地址。
此外,如果我给它一个新的队列名称,它会创建它,但不会拉取我发布给它的消息。这令人困惑。我的实际 Java 应用程序的行为与此完全不同——它使用的是 JMS
我与实用程序的连接是这样的:
stomp -H 192.168.56.105 -P 61616 -U user -W password
> subscribe test3.topic::test.A.queue
哪个给我这个错误:
Subscribing to 'test3.topic::test.A.queue' with acknowledge set to 'auto', id set to '1'
>
AMQ229019: Queue test.A.queue already exists on address test3.topic
这让我觉得 Stomp 在订阅时试图创建队列,但我在文档中看不到如何管理它。 http://jasonrbriggs.github.io/stomp.py/api.html
我也有一个 Python 脚本给了我同样的问题。
import os
import time
import stomp
def connect_and_subscribe(conn):
conn.connect('user', 'password', wait=True)
conn.subscribe(destination='test3.topic::test.A.queue', id=1, ack='auto')
class MyListener(stomp.ConnectionListener):
def __init__(self, conn):
self.conn = conn
def on_error(self, headers, message):
print('received an error "%s"' % message)
def on_message(self, headers, message):
print('received a message "%s"' % message)
"""for x in range(10):
print(x)
time.sleep(1)
print('processed message')"""
def on_disconnected(self):
print('disconnected')
connect_and_subscribe(self.conn)
conn = stomp.Connection([('192.168.56.105', 61616)], heartbeats=(4000, 4000))
conn.set_listener('', MyListener(conn))
connect_and_subscribe(conn)
time.sleep(1000)
conn.disconnect()
我建议您尝试 latest release of ActiveMQ Artemis. Since 2.13.0 was released a year ago a handful of STOMP related issues have been fixed specifically ARTEMIS-2817,它看起来像您的用例。
我不清楚 为什么 您使用完全限定队列名称 (FQQN),所以我倾向于认为这不是正确的方法,但无论您遇到什么问题,都应该在以后的版本中得到修复。如果您希望多个消费者共享单个订阅中的消息,那么使用 FQQN 将是一个不错的选择。
此外,如果您想使用 topic/
或 queue/
前缀来控制来自代理的路由语义,那么您应该适当地设置 anycastPrefix
和 multicastPrefix
作为the documentation.
这可能是巧合,但 ARTEMIS-2817 最初是由“BENJAMIN Lee WARRICK”报道的,它与“BenW”(即你的名字)惊人地相似。