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

ActiveMQ Artemis如何控制多播队列名称?

常乐
2023-03-14

当消费者订阅一个主题时,一个多播队列会自动创建一个系统生成的名称。我想知道是否有可能控制这个名称生成以使它更友好(像consumer_idsession_ididx)。

我使用web控制台进行监视,在以前版本的ActiveMQ(在Artemis之前)中,我可以看到每个订阅主题的用户名称,这非常方便。

我以前在ActiveMQ 5.0的web控制台中看到的内容:

我现在在使用Artemis的控制台中看到:

共有2个答案

谢昂雄
2023-03-14

在我看来,您在ActiveMQ Artemis web控制台中查找消费者信息的位置不正确。目前,您正在查看主导航树,其中显示“主要”组件,如接受者、地址、队列等。消费者不是按设计出现在这里的。ActiveMQ Artemis web控制台的屏幕截图只显示了地址上的多播队列。在JMS主题用例中,每个订阅者都有自己的队列,通常称为“订阅队列”。但是,订阅队列与使用者不同。消费者从订阅队列中消费。如果想查看相应的消费者,则需要打开“消费者”选项卡。

例如,下面是3个非持久JMS订阅服务器连接到名为myTopic的JMS主题时的屏幕截图:

正如您所注意到的,订阅队列的名称并不能真正告诉您多少。但是,如果单击“消费者”选项卡,您将看到大量信息,例如:

从“消费者”选项卡中,您可以看到消费者从何处连接,连接的队列是什么

需要注意的是,ActiveMQ Artemis并不能用底层JMX MBean代表每个消费者。这就是ActiveMQ 5。x确实如此,这可能会导致大量使用者出现资源利用问题,因为MBean是相当“重”的对象

注意:这些截图是在最新版本(即2.16.0)中拍摄的,该版本包含比您在截图中使用的版本更新的web控制台。

壤驷坚
2023-03-14

这些UUID命名的队列是临时订阅,一旦客户端断开连接,它们就会被删除。

命名clientId.subscriptionName表单的持久订阅的经典方法是在客户机上设置clientId和subptionName属性。请注意,当订阅者断开连接时,持久订阅也将继续获得消息。

使用Artemis,您还可以使用完全限定队列名称(FQQN)功能来实现相同的功能,但对持久订阅名称的完全控制还有其他好处:

首先,创建一个如下所示的多播地址:

xml prettyprint-override"><address name="example.foo">
    <multicast>
        <queue name="q1"></queue>
        <queue name="q2"></queue>
    </multicast>
</address>

此时,您可以向示例发送消息。foo主题,并从示例中使用它们。foo::q1示例。foo::q2队列(注意分隔符)。

 类似资料:
  • > 下载Artemis2.13.0,预先创建组播地址测试,然后在此地址上创建组播队列123,使用控制台向123队列发送1消息 使用IDEA创建springboot项目,pom文件导入以下依赖项 pplication.properties添加配置 创建消费者以接收在队列123中预先创建的消息 我无法接收该消息,使用2.13.0artemis-jms-client将出现以下错误消息 Artemis创建

  • 问题内容: 我想将一个简单的对象序列化为JSON: 但是只要我这样做: 属性名称不作为指定部分,但类似于那些直接定义在类如的情况下它不是,但。 我究竟做错了什么? 问题答案: 我通过使用此问题答案中提供的技术解决了这个问题: 这是我上的课: 用法: 我还必须修改初始类:

  • 问题内容: 如何同时在多个对象上“选择” ? Golang的频道具有所需的功能: 其中第一个要解除阻塞的通道执行相应的块。如何在Python中实现? 更新0 根据tux21b答案中给出的链接,所需的队列类型具有以下属性: 多生产者/多消费者队列(MPMC) 提供每个生产者FIFO / LIFO 当队列为空/完整的消费者/生产者被阻止时 此外,渠道可能会被阻塞,生产者将阻塞,直到消费者取回该物品为止

  • 我正在Azure中创建一个函数应用程序,并希望使用队列触发器。我知道如何在设计时配置队列名称,例如: 但是,我希望能够在配置文件中定义和引用它。我知道函数的存在。json(可能是这个),主机。json和本地。设置。json,但我不知道如何在其中设置队列名称并在函数中引用它。 如果我部署在VisualStudio中新创建的函数(使用新的15.3更新),我可以在函数中看到以下内容。部署后的json文件

  • 默认情况下,C++容器应该是线程安全的。我必须错误地使用多线程,因为对于此代码: 我得到了:

  • 我的查询是针对产品Red Hat AMQ7.x(我使用的是7.2),它基于Apache ActiveMQ Artemis和一个使用AMQP协议连接到队列的.NET客户机。 Artemis的一篇文章讨论了单播(点对点)、多播(发布-订阅)以及这些寻址的组合:https://activemq.apache.org/Artemis/docs/2.0.0/address-model.html 它没有详细说