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