使用java清除mq消息

问题描述:

连接到websphere mq v7.1并使用Java和JMS清除一个或多个指定队列的所有消息的最佳方法是什么?我是否需要使用Websphere MQ特定的Java API?谢谢。使用java清除mq消息

像所有的好问题一样,“这取决于”。

只有当队列上没有打开的句柄时,才能用命令清除队列。在这种情况下,发送PCF命令来清除队列是非常有效的,但是如果有打开的句柄,则会返回错误。 PCF命令当然是Java特性,而不是JMS,因为它们是WebSphere MQ专有的。

另一方面,任何授权执行破坏性的程序都会从​​队列中清除队列。在这种情况下,只需循环获取,直到获得指示队列为空的2033返回码。这可以使用JMS或Java执行,但它们都为您管理输入缓冲区。如果队列真的很深,那么您最终将移动所有数据,并且如果应用程序与客户端连接,您将以网络速度而不是内存移动它。

要解决此问题,您需要指定最小量的缓冲区,并且作为GET选项之一,还需指定0​​。这只会在get调用期间移动消息头,并且可能会更快。

最后,如果您正在按程序执行此操作,并且不管使用哪种方法,请关闭几个线程并且不要使用同步点。实际上,你必须竭尽全力在队列中获得排他性输入,所以一旦你获得了一个会话,就会产生许多线程。一旦关闭所有线程,将优雅地关闭每个线程并关闭会话。

+0

谢谢。我将采用使用JMS API消费消息的方法。 – arrehman 2012-07-18 14:23:46