如何在ActiveMQ中查看出列消息

时间:2017-04-26 05:36:55

标签: activemq

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

有没有办法将所有出列的消息再次放入Queue。 任何解决方案都可以实时备份所有邮件。

提前致谢

3 个答案:

答案 0 :(得分:0)

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

因此,如果您已将所有消息从队列发送到另一个队列或代理,则可以将这些消息重新发送到原始队列。但是,所有这些都取决于您对消息所做的如果您使用MDB / Java代码等消耗它,您将无法再将它们放置到原始队列中。

答案 1 :(得分:0)

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

ActivemMQ还提供了一些功能,使其更容易,如镜像队列(http://activemq.apache.org/mirrored-queues.html)或日志插件。

但您仍然需要在其他地方保存邮件并自行备份。

答案 2 :(得分:0)

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