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

一次获取队列中的所有消息(Spring Boot JMSListerner注释)

董权
2023-03-14

我有一个特殊的要求,即获取队列中所有挂起的消息,以便进一步处理它们。详细说明。这就是应用程序的流程:

  • 有一个队列设置将承载消息
  • 默认情况下,使用MessageListenerContainer的stop()方法停止该队列的侦听器
  • 将通过调用listenerContainer按需侦听队列中的消息。start()
  • 要求是我应该一次获取队列中可用的所有消息,以便只处理那些消息。如果由于任何原因,在处理现有消息期间,新消息被发布到队列上,那么这些消息应该保留在队列本身上。稍后当listenerContainer时,将再次读取这些内容。开始() 按需调用

例如:

>

  • 假设我们有一个名为abc queue的队列。JMS侦听器配置为:

    @JmsListener(destination = "abc-queue", 
        containerFactory = "abcFactory",
        selector = "_type='java.util.LinkedHashMap'",
        id = "abc-listener")
    

    在应用程序启动时,我们将这样做:

    MessageListenerContainer listenerContainer = jmsListenerEndpointRegistry.getListenerContainer("abc-listener");
    listenerContainer.stop();
    

    应用程序将有一个控制器endpoint来按需监听此队列。一旦调用,就会发生以下情况:

    MessageListenerContainer listenerContainer = jmsListenerEndpointRegistry.getListenerContainer("abc-listener");
    listenerContainer.start();
    // now read all the messages in queue at once and store them in a list
    // listenerContainer.stop();
    // start processing the messages one by one
    

    问题:

    • 我们如何一次读取所有消息并将其存储在列表中
    • 即使队列中存在消息,listenerContainer。start()不会立即开始处理队列。只有在队列上出现另一条消息后才会触发

    任何有用的指针都将不胜感激。

  • 共有1个答案

    孔皓
    2023-03-14

    潜在解决方案:

    • 就像Daniel在评论中提到的那样,将消息移动到另一个队列
    • 消息从队列移动到文件
    • 将消息从队列移动到数据库
     类似资料:
    • 我正在使用Azure服务总线队列。但是我不能使用“获取所有队列消息(peek Lock):微软内置于api”从队列中获取所有消息。 有没有办法获取所有队列消息? {"$连接":{"值":{"servicebus_1":{"连接ID":"/订阅/c776fex3-6aec-4722-b099-b054c267b240/资源组/Plugin-Resources/提供者/Microsoft.网络/连接/

    • 问题内容: 我们正在使用amqplib来发布/使用消息。我希望能够读取队列中的消息数(理想情况下是已确认和未确认)。这将使我能够向管理员用户显示良好的状态图,并检测某个组件是否无法满足负载需求。 我在amqplib文档中找不到有关读取队列状态的任何信息。 有人可以指出我正确的方向吗? 问题答案: 使用皮卡: 使用PyRabbit: 使用HTTP 句法: 例: 注意:默认虚拟主机是需要转义为 使用C

    • 我想构建一个简单的消费者程序(java ),以获取ActiveMQ主题中存储的所有消息。我有一个在队列中发送文本消息的生成器。 但我不知道如何开始写我的消费者来检索旧消息并等待新消息。 如果你有一个例子,谢谢! 这是我的制片人:http://pastebin.com/uRy9D8mY 这是我的消费者:http://pastebin.com/bZh4r66e 当我先于消费者运行生产者,然后运行消费者

    • 我想从azure服务总线(队列)读取所有消息。 我已经按照下面的指示链接https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-php-how-to-use-queues 目前它只能获取一条消息。。 我想从服务总线(队列)获取所有消息。 提前谢谢。。

    • 我的设置: 我创建了一个没有启用会话的Azure服务总线队列 我有一个使用触发器 触发器间隔为 我的结果: 我正在以超过15秒的速度将消息放入队列 我的Azure逻辑应用触发器一次拾取多个队列消息,比每15秒拾取一条消息快得多 我的问题: 此连接器的触发器是否设计为一次拾取多条排队消息(在?)

    • 我已经使用手动触发器创建了一个azure服务总线和一个新的逻辑应用程序。然后,我将“从队列获取消息(peek lock)”操作添加到应用程序中,并将最大消息数设置为“20”。 然后我在我的队列中手动创建5条新消息,然后触发我的新逻辑应用程序。然后,当我查看应用程序的执行情况时,我只看到检索到一条消息(并检查,有4条消息仍在我的队列中)。 似乎“20”的计数没有得到尊重。我还检查了我的服务总线队列的