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

如何在ActiveMQ中查看出队消息

刘瀚
2023-03-14

在从动态队列(ActiveMQ)(挂起的消息=1000)读取消息时,我已经确认了每条消息,现在退出队列的消息数=1000。

有没有办法将所有出列的消息再次放入队列中。任何物理备份所有消息的解决方案。

提前感谢

共有3个答案

陈功
2023-03-14

要在需要消息体时备份排队消息:可以将其添加到activemq中。xml这将按日期和队列将消息的副本保存到文件的${activemq.base}/bin/data/activemq/

<bean  id="ActiveMQVMConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="vm://localhost?create=false&amp;waitForStart=10000"/>
    <property name="userName" value="${activemq.username}"/>
    <property name="password" value="${activemq.password}"/>
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" >
    <property name="connectionFactory" ref="ActiveMQVMConnectionFactory"/>
</bean>


<camelContext id="camel" trace="false" xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="activemq:queue:*?mapJmsMessage=false&amp;selector=CamelFileNameProduced IS NULL" />
        <choice>
            <when>
                <simple>${in.headers.CamelFileNameProduced} == null</simple>
                <setHeader headerName="CamelJmsDestinationName">
                    <simple>${in.header.JMSDestination.physicalName}</simple>
                </setHeader>
                <transform>
                    <simple>${in.body}\n</simple>
                </transform> 
                <to uri="file://data/activemq/?fileExist=Append&amp;fileName=routeMessages-${in.header.JMSDestination.physicalName}-${date:now:yyyyMMdd}.txt" />
                <to uri="activemq:dummy" />
            </when>
        </choice>
    </route> 
</camelContext>

如果您只需要元数据:

        Destination advisoryDestination = session.createTopic("ActiveMQ.Advisory.MessageConsumed.>");
        MessageConsumer consumer = session.createConsumer(advisoryDestination);
        consumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message msg) {
                System.out.println(msg);
                System.out.println(((ActiveMQMessage) msg).getMessageId());
            }
        });

http://activemq.apache.org/advisory-message.html

张姚石
2023-03-14

在activemq中可以看到未设计出队列的消息,您需要自己的逻辑将其保存到其他位置。

ActivemMQ还提供了一些函数来简化这一过程,例如镜像队列(http://activemq.apache.org/mirrored-queues.html),或日志插件。

但您仍然需要将消息保存在其他地方并自行备份。

薛栋
2023-03-14

一旦代理从消费者处获得确认,它就会从代理的持久性存储[KahaDB/数据库,根据配置]中删除消息。

因此,如果您已经将所有消息从队列发送到另一个队列或代理,您可以将这些消息重新发送到原始队列。然而,这一切都取决于您对消息所做的事情。如果您使用MDB/java代码等消耗了它,您将无法将它们再次放入原始队列。

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

  • System.Dead.Letter.Queue中有2条消息。我如何查看这些消息,以便能够看到它们有什么问题? 我在IBM的网站上读到,你可以这样做: 但是当我运行这个时,我会得到以下错误: 谢谢

  • 我正在使用WSO2ESB4.7.0和ActiveMQ5.8.0。我希望将消息存储在队列中,为此我尝试使用这段代码,但它不工作。我创建了存储库,这将有助于存储消息,我的conumeing过程已经在JAVA代码中完成,所以我不必担心消费,如果我这样做了,我的消息将出现在acivemq UI中。我的配置如下所示 我试图通过代理传递消息,为此我编写了简单的代理服务 在这种情况下,我的队列没有在Active

  • 这是我的配置: 这是我的消费者: 因此,我将一条消息放入队列,其中有效负载=“launch”。 我想测试事务,如果有效负载等于“launch”,它就会抛出一个异常。 因此,多亏了重新交付政策,消费者尝试使用该消息5次。在ActiveMq队列列表中的第五个之后,我没有看到我发送的消息。 消息放在哪里?在死信队列中?在哪里可以看到带有“launch”消息的死信队列? 谢谢

  • 所以我是Laravel新手。基本上,我试图做的是在加载Laravel默认着陆页时查看“你好世界”消息。我有以下内容, 但是“hello world”并没有出现在终端上。这是不是在Laravel中正确使用了?我们将不胜感激。 谢谢

  • 为此,我遵循了以下步骤: 1)创建了配置单元脚本,其中包含-->create table、load data语句和select*from命令。 2)创建了S3 bucket,并将对象加载到其中:配置单元脚本,文件加载到表中。 以及如何在Amazon EMR中查看来自HDFS的数据?