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

如何从Apache Artemis获得与从带有通配符JMS侦听器的经典ActiveMQ相同的行为

吴哲
2023-03-14

首先,让我解释一下我使用经典的ActiveMQ所做的尝试,它非常适合我的需求:

    @JmsListener(destination = "queue.>")
    public void receiveMessage(Event event) {
        //Process the event message
    }

我观察到的我不能配置Artemis来做同样的事情是:

  1. 使用通配符侦听ActiveMQ队列未创建新队列(侦听器队列)
  2. 使用通配符侦听器使用消息实际上会减少实际队列中挂起消息的数量。
  3. 通配符侦听器实际上会相当公平地从所有队列读取消息。它仍然尊重每个队列上的FIFO,但不会尊重跨队列的FIFO。例如,当我在queue.test1.event中放入100条消息,然后才在queue.test2.event中添加100条消息时,如果我启动通配符侦听器,它将开始公平地从两个队列中读取消息,尽管queue.test2.event队列中的所有消息基本上都添加在queue.test1.event.
  4. 中的100条消息之后

我需要功能#2和#3。第一个只是观察,我认为这是我在阿尔忒弥斯的问题的根本原因。

现在,当我转移到Artemis时发生的事情是:通配符模式有点不同,但我做了相同的场景。监听器如下所示:

    @JmsListener(destination = "queue.#")
    public void receiveMessage(Event event) {
        //Process the event message
    }

如您所见,通配符模板更改为queue.#,以便能够读取所有这些队列。

我的Artemis队列在web控制台中如下所示:Artemis中的队列,

这给我带来了一个巨大的问题。虽然我仍然希望它尊重每个队列中的FIFO,但我也希望它开始使用来自其他队列的消息。因为,如果一个客户正在处理巨大的任务,它不应该阻止其他人继续他们的任务。

PS1:我限制两个测试中的监听器每次只能使用一条消息,以便能够正确地测试它。

PS2:如果你想知道为什么我不使用经典的ActiveMQ,如果它完全符合我的需要,答案是:Apache将使Artemis在未来成为它的主要版本(一旦它达到一定的成熟度),我希望与路线图保持一致。引用自其网站:

PS4:我对解决方案和安装都使用默认配置。

共有1个答案

常自强
2023-03-14

简单地说,ActiveMQ Artemis不支持通配符使用者。它只支持具有相似但不同语义的通配符地址(正如您这个问题的答案中所解释的那样)。

您可以打开一个问题来请求实现此特性。

 类似资料:
  • 现在当我启动基于spring的应用程序时。我在调试器中看到,我的侦听器方法注册了,但是Spring不连接到ActiveMQ队列,我可以通过查看ActiveMQ web控制台轻松地看到这一点。此外,我没有看到任何来自spring的日志输出,而JMS的东西是这样做的。 我错过什么了吗?从这里走下去最好的路是什么?当然,我也测试了从ActiveMQ的web控制台中发送消息,但是如果没有客户端连接,就没有

  • 我有一个用例,我想在一个应用程序中创建多个监听器(6)。我想订阅多个目的地(6个主题)。所有订阅都是持久的。我为每个监听器使用单独的默认消息监听器容器(DMLC),并使用不同的客户端id,但我对如何使用连接工厂感到困惑。 我是否应该使用单个 ActiveMQ 池连接工厂,最大连接数指定为 6。或者我应该为每个侦听器使用不同的池连接工厂吗? 使用具有最大连接池连接工厂对于持久用户有什么危害吗? 源代

  • ActiveMQ Artemis中是否有与ActiveMQ Classic的相当的连接(双向网桥)? 在核心桥我没有找到双工参数。

  • 根据使用JMS 1.1的官方文档,ActiveMQ 5.15是否可以与JMS 2.0配合使用。将ActiveMQ 5.15与JMS 2.0配合使用有何意义。如果ActiveMQ 5.15 JMS 2.0不是一种可行的方法,那么Artemis是一个很好的替代品吗?Artemis是否足够稳定,可以用于生产级企业应用程序?

  • 1天前 嗨,当试图根据http://wso2.org/project/esb/java/4.0.3/docs/samples/transport_samples.html/sample250使用wso2 esb侦听来自JMS队列的消息时,我遇到了一个异常,如下所示 XML解析错误:格式不正确的位置: org.apache.axis2.axisfault:系统无法从jms://jmslistener

  • 要运行Kafka,需要在文件。有两种设置我不理解。 有人可以解释侦听器和广告侦听器属性之间的区别吗? 留档说: 侦听器:套接字服务器侦听的地址。 和 advertised.listeners:主机名和端口代理将向生产者和消费者做广告。 我什么时候必须使用哪个设置?