【发布时间】:2012-02-05 07:06:33
【问题描述】:
我有一个从队列接收消息的客户端。我目前有一个实现onMessage() 的MessageListener。
收到消息后,将对其进行进一步处理,然后通过onMessage() 方法将其保存到数据库中;客户端然后确认消息接收。
只要数据库正常,就没有问题。但是如果数据库关闭,客户端将不会确认。
为了解决这个问题,我希望客户端按预定时间间隔向队列发送任何未确认消息的预定请求。
事实上,我这样做的唯一方法是重新启动不理想的客户端。有没有办法触发队列重新发送未确认的消息而无需重新启动?
我在onMessage() 有什么:
//code to connect to queue
try {
if (DB is available){
//process message
//save required details to DB
msg.acknowledge();
}
else{
//schedule to request same message later from queue
}
} catch (Exception e) {}
【问题讨论】:
-
如果数据库已关闭,为什么不等到它启动后再尝试继续。这样就不需要重播消息
-
你的意思是阻塞直到数据库启动?我不确定这是否可以……除非我误解了您的评论。
-
如果在数据库启动之前一直阻塞会发生什么?那个线程有更重要的事情要做吗? ;) 如果是这样,我会让更重要的事情在另一个线程、会话或连接中运行。