【发布时间】:2017-06-15 22:29:02
【问题描述】:
所以我得到了一个使用 Connectionfactory 的高级队列:
ConnectionFactory jmsQueueConnectionFactory() throws JMSException, SQLException {
final OracleDataSource dataSource = new OracleDataSource();
dataSource.setUser(username);
dataSource.setPassword(password);
dataSource.setURL(url);
dataSource.setImplicitCachingEnabled(true);
dataSource.setFastConnectionFailoverEnabled(true);
return AQjmsFactory.getConnectionFactory(dataSource);
}
这是在共享数据库上运行的,该数据库可能会重新启动,或者有时网络会出现短暂的中断。这导致队列中不再有消息。
我使用 spring MessageListener 来检索消息,但实际上没有任何指示符或任何指示队列不再运行的情况。重新启动应用程序后,我会收到一堆应该已经处理过的旧消息。
有没有办法或特定的数据源实现重新连接或什么?
更新:监听器实现
@Bean
OracleAqQueueFactoryBean etlQueueFactory() throws JMSException, SQLException {
final OracleAqQueueFactoryBean bean = new OracleAqQueueFactoryBean();
bean.setConnectionFactory(jmsQueueConnectionFactory());
bean.setOracleQueueUser("USER");
bean.setOracleQueueName("QUEUE");
return bean;
}
@Bean
DefaultMessageListenerContainer jmsContainer() throws JMSException, SQLException {
final DefaultMessageListenerContainer bean = new DefaultMessageListenerContainer();
bean.setConnectionFactory(jmsQueueConnectionFactory());
bean.setDestination(etlQueueFactory().getObject());
bean.setMessageListener(new MyListener());
bean.setSessionTransacted(false);
return bean;
}
public class MyListener implements MessageListener {
@Override
public void onMessage(Message message) {
...
}
}
【问题讨论】:
标签: spring oracle jms datasource