ActiveMQ:消费后永久存储JMS消息

时间:2014-07-01 13:05:26

标签: java jms activemq

我已设置ActiveMQ并能够制作和使用MapMessage。消息存储在Oracle下的ACTIVEMQ_MSGS表中,直到消耗完为止。来自数据库的消费记录被删除后。

写入触发器并手动将数据推入另一个表是一种选择。但我只想与您核实是否有任何我可以设置的属性可以实现。

activemq.xml的配置如下所示:

    <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
          <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
          <property name="url" value="jdbc:oracle:thin:@localhost/XE"/>
          <property name="username" value="USERNAME"/>
          <property name="password" value="PASSWORD"/>
          <property name="maxActive" value="200"/>
          <property name="poolPreparedStatements" value="true"/>
    </bean>


    <persistenceAdapter>
            <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#oracle-ds"/>
    </persistenceAdapter>

我的Java代码如下:

// Getting JMS connection from the server and starting it
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(Constants.ACTIVEMQ_URL);
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// Destination represents 'NIKHIL.QUEUE' on the JMS server.
Destination destination = session.createQueue("NIKHIL.QUEUE");

// MessageProducer is used for sending messages (as opposed to MessageConsumer which is used for receiving them)
producer = session.createProducer(destination);

//Message creation goes here...

1 个答案:

答案 0 :(得分:0)

鉴于问题中的信息唯一合适的答案是,否。没有任何属性可以使消息神奇地转到数据库中的其他表。代理正在按设计工作,消息被消耗后会被删除。如果你想要某种镜像,你可以尝试创建一个复合目的地,使得到达一个队列的消息被分派到两个单独的队列,你从一个队列消费并保留另一个,但是你需要以某种方式管理它。