使OracleDataSource对数据库重启和hickup具有强大的功能

时间:2017-01-30 17:03:11

标签: spring oracle jms datasource

所以我得到了一个使用Connectionfactory的高级队列:

"?delete=true&include=" + pattern

这是在一个可能重新启动的共享数据库上运行,或者有时网络只有一个简短的hickup。这导致队列中没有更多消息。

我使用Spring MessageListener来检索消息,实际上没有指示符或者队列不再运行的内容。重新启动应用程序后,我会收到大量应该已经处理过的旧消息。

是否存在重新连接的方式或特定数据源实现?

更新:Listener Impl

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);
} 

1 个答案:

答案 0 :(得分:0)

我想你必须在JMS级别而不是DB级别上进行。

不确定您使用的是哪种类型的侦听器,但Spring中的DefaultMessageListenerContainer是使用consumer.receive(timeout)循环实现的。它比使用普通侦听器更强大,因为它会尝试在每个轮询周期重新连接(如果需要)。