所以我得到了一个使用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);
}
答案 0 :(得分:0)
我想你必须在JMS级别而不是DB级别上进行。
不确定您使用的是哪种类型的侦听器,但Spring中的DefaultMessageListenerContainer是使用consumer.receive(timeout)循环实现的。它比使用普通侦听器更强大,因为它会尝试在每个轮询周期重新连接(如果需要)。