当前位置: 首页 > 知识库问答 >
问题:

使用STOMP订阅ActiveMQ Artemis时遇到麻烦。队列已存在

施越彬
2023-03-14

我在这里做错了什么?我试图使用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()

共有1个答案

程树
2023-03-14

我建议您尝试ActiveMQ Artemis的最新版本。自从2.13.0一年前发布以来,一些与STOMP相关的问题已经得到了修复,特别是ARTEMIS-2817,这看起来像您的用例。

我不清楚为什么要使用完全限定队列名(FQQN),所以我倾向于认为这不是正确的方法,但无论如何,您遇到的问题应该在以后的版本中得到解决。如果您希望多个使用者在单个订阅中共享消息,那么使用FQQN将是一个不错的选择。

此外,如果希望使用主题/队列/前缀来html" target="_blank">控制来自代理的路由语义,则应该按照文档中的描述适当地设置anycastprefixmulticastprefix

这可能是巧合,但ARTEMIS-2817最初是由“Benjamin Lee Warrick”报告的,它与“Benw”(即你的名字)惊人地相似。

 类似资料:
  • 问题内容: 这不是让我输入我的名字,但是年龄确实可以。我知道我可以更改语句的顺序,但是还有另一种方法可以做到吗? 问题答案: 您的问题是,下一个int不考虑输入在您的姓名部分中的换行符。因此,名称返回为空白。 您可以通过两种方式更改代码: 要么 我个人喜欢第二种方式。

  • 我是新来的React Native,刚刚用React Native init rnapp命令创建了一个应用程序,它发出了许多警告: 然后我转到android文件夹并运行以下命令: 但我明白了: * 有人知道如何修复这个问题,并在这个空应用程序上为Android构建apk文件吗?

  • 问题内容: 我的Android应用程序具有登录屏幕,并且用户登录到他的仪表板。但是我不希望用户每次关闭应用程序并启动时都进行登录(除非他们从仪表板上注销)。因此,我创建了一个类来检查用户是否登录 CheckLoggedIn.java 当用户登录时,我将布尔值更改为,并在注销时更改。但是,当我通过成功登录并关闭并再次启动进行检查时,它仍然进入LoginActivity。为什么? 编辑:现在,我明白这

  • 问题内容: 试图了解如何在Go中解组XML。通读多个示例和stackoverflow问题。我想要的是一个切片,其中包含系统上安装的所有修补程序。我什至无法解开补丁,没有错误,只是一片空白。可能所做的事情基本上是错误的,在此先感谢您的任何建议。 问题答案: 我认为您遇到的问题是程序包未填充未导出的字段。xml文档说: 因为Unmarshal使用了反射包,所以它只能分配给导出的(大写)字段。 您要做的

  • 问题内容: -edit2-3小时后,仍然有相同的问题。我正在使用noinstall存档软件包。-编辑-也许有人可以告诉我一种检查表是否存在的更好方法? 我的函数库中有一个函数来检查是否存在一个表,该表过去我曾问过要怎么做。 我删除了数据库并再次创建了它。我的代码未正确创建表。调试后,我决定编写以下内容。 很奇怪… mydb被删除并再次创建(我写了,应该消失了吗?)。让我们找出存在的东西 我不仅不知

  • 我正在浏览https://ca.finance.yahoo.com/quote/aapl并想要得到股票价格的变化,绿色/红色文本。我已经能够刮除股票价格,但不能改变价值,因为他们位于相同的“div”类,但不同的“span”类。 我想要的文本:“-3.89(-1.36%)”-数字会有所不同 来自网站得HTML: 我用什么得到的价格:(282.80)-价格可能不同 我已经尝试了许多改变类名、span名