【问题标题】:How to see Dequeued messages in ActiveMQ如何在 ActiveMQ 中查看出列消息
【发布时间】:2017-04-27 00:12:10
【问题描述】:

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

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

提前致谢

【问题讨论】:

    标签: activemq


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      出队的消息不是设计的可以在activemq中看到,需要自己的逻辑保存到别处。

      ActivemMQ 还提供了一些功能来简化此操作,例如 Mirrored Queues(http://activemq.apache.org/mirrored-queues.html) 或日志插件。

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

      【讨论】:

        【解决方案3】:

        在您需要消息正文时备份排队的消息: 您可以将其添加到您的 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-22
          • 2018-02-20
          • 1970-01-01
          • 2015-11-19
          • 2011-11-19
          • 2018-07-04
          • 2022-06-11
          • 2012-04-23
          相关资源
          最近更新 更多