我正在寻找一种方法来可靠地从JMS队列中检索消息并将它们存储到平面文件中。 “可靠地”是指在发生任何故障(不包括物理磁盘故障)的情况下,可能在系统和进程重新启动后,我希望:
实现这一目标的好方法是什么?
上下文:Linux上的WebLogic,几小时内接收约3000条消息/秒。
谢谢 - 弗洛里安。
答案 0 :(得分:0)
你将面临的问题是文件系统; JMS支持JTA,但文件系统不支持。请考虑以下事项:
public void onMessage(Message message){
try{
TextMessage msg = (TextMessage)message;
fileOutput.write( msg.getText());
fileOutput.flush();
}catch(Exception e){
e.printStackTrace();
throw e;
}
}
假设AUTO_ACKNOWLEDGE,在onMessage()
成功返回后,将自动确认收到并序列化到文件的每条消息。但是,在收到确认之前,JMS服务器可能会崩溃,但是在将消息写入文件之后;所以你会得到一份副本。
您是否考虑过保存到数据库,而不是写入文件,而不是写入文件?如果是这样,您可以在JMS和RDBMS之间使用分布式事务,从而不会丢失任何消息或重复。
希望有所帮助