我正在编写一个在LINUX环境中运行的Java应用程序,它使用SYNCPOINT在MQ上执行事务.它使用Websphere MQ Java类与MQ服务进行交互.我在我的代码中做的是以下(伪):
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQConstants.MQGMO_FAIL_IF_QUIESCING | MQConstants.MQGMO_SYNCPOINT;
MQMessage message = new Message();
queue.get(message, gmo);
// process the message, save to database
databaseConnection.commit();
queueManager.commit();
我基本上抓取消息,处理它,持久化到数据库,然后调用queueManager上的提交.该进程在TIBRV上侦听消息,以便正常关闭.
我一直在测试这个过程,以确保没有消息丢失.我将20k消息放在队列中,然后运行该过程.我在处理过程中执行正常的关机调用.然后,我比较队列中的消息量与数据库中的消息量.当通过TIBRV消息发生正常关闭时,MQ消息的数量是DB消息的数量=最初在队列上的总消息数.
但是,当我执行kill或kill -9时,我发现消息丢失了.我总是得到19999总消息的结果.
有没有办法可以调查我如何丢失这条消息? Websphere App Server上是否有任何我需要注意的事项?