分享一段代码,很实用。

下面这段java代码是我在国外一个论坛上发现的,源地址已经忘了。代码的作用是可以删除正在使用的mq的队列消息,管理mq的人一定知道它的美妙了吧,哈哈。

我拿来改了下,增加了2个参数支持:ccsid和channel。上代码:

 import java.util.Hashtable;
import com.ibm.mq.*; /**
* A simply Java class to destructively read (delete) all message on a queue.
*
* @author Roger Lacroix, Capitalware Inc.
* @return 0 for ok or 1 for failed.
* @version 1.0.0
* @license Apache 2 License
*/ /**
* lichmama reedited
* change: add parameters to set ccsid and channel
*/ public class EmptyQ
{
private Hashtable params = null;
public int port = 1414;
public String hostname;
public String channel;
public String qManager;
public String inputQName;
public int ccsid = 1208; /**
* The constructor
*/
public EmptyQ()
{
super();
} /**
* Check if all of the parameters were passed to the class file.
* @return true/false
*/
private boolean allParamsPresent()
{
boolean b = params.containsKey("-s") && params.containsKey("-h") && params.containsKey("-p") && params.containsKey("-c") && params.containsKey("-m") && params.containsKey("-q");
if (b)
{
try
{
port = Integer.parseInt((String) params.get("-p"));
ccsid = Integer.parseInt((String) params.get("-s"));
}
catch (NumberFormatException e)
{
b = false;
}
// Set up MQ environment
hostname = (String) params.get("-h");
channel = (String) params.get("-c");
qManager = (String) params.get("-m");
inputQName = (String) params.get("-q"); }
return b;
} /**
* Initialize MQ environment variables
* @param args
* @throws IllegalArgumentException
*/
private void init(String[] args) throws IllegalArgumentException
{
params = new Hashtable(5);
if (args.length > 0 && (args.length % 2) == 0)
{
for (int i = 0; i < args.length; i += 2)
params.put(args[i], args[i + 1]);
}
else
{
throw new IllegalArgumentException();
}
if (allParamsPresent())
{
// Set up MQ environment
MQEnvironment.hostname = hostname;
MQEnvironment.channel = channel;
MQEnvironment.port = port;
//CCSID: DIS QMGR CCSID
MQEnvironment.CCSID = ccsid;
MQException.log = null; /* Tell MQ client library not to output anything. */
}
else
{
throw new IllegalArgumentException();
}
} /**
* Main entry point.
* @param args
*/
public static void main(String[] args)
{ EmptyQ readQ = new EmptyQ(); try
{
readQ.init(args);
readQ.emptyIt();
}
catch (IllegalArgumentException e)
{
System.err.println("Usage: java EmptyQ <-s ccsid> <-h host> <-p port> <-c channel> <-m QueueManagerName> <-q QueueName>");
System.exit(1);
}
} /**
* Connect to a queue manager, open a queue then destructively get (delete)
* all messages on the queue.
*/
private void emptyIt()
{
boolean loopAgain = true;
MQQueueManager _queueManager = null;
MQQueue queue = null;
int openOptions = MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INPUT_SHARED;
System.out.println("EmptyQ v1.0.0 by Capitalware Inc.");
try
{
_queueManager = new MQQueueManager(qManager);
System.out.println("EmptyQ: Connected to queue manager "+qManager); try
{
queue = _queueManager.accessQueue(inputQName, openOptions, null, null, null);
System.out.println("EmptyQ: Opened queue "+inputQName); int depth = queue.getCurrentDepth();
System.out.println("EmptyQ: Current depth: " + depth); MQGetMessageOptions getOptions = new MQGetMessageOptions();
getOptions.options = MQC.MQGMO_NO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_ACCEPT_TRUNCATED_MSG; MQMessage message;
while (loopAgain)
{
message = new MQMessage();
try
{
queue.get(message, getOptions, 1);
}
catch (MQException e)
{
if (e.completionCode == 1 && e.reasonCode == MQException.MQRC_TRUNCATED_MSG_ACCEPTED)
{
// Just what we expected!!
}
else
{
loopAgain = false;
if (e.completionCode == 2 && e.reasonCode == MQException.MQRC_NO_MSG_AVAILABLE)
{
// Good, we are now done - no error!!
}
else
{
System.err.println("EmptyQ: MQException: " + e.getLocalizedMessage());
}
}
}
}
System.out.println("EmptyQ: Queue emptied.");
}
catch (MQException e1)
{
System.err.println("EmptyQ: MQException: " + e1.getLocalizedMessage());
}
finally
{
if (queue != null)
{
queue.close();
System.out.println("EmptyQ: Closed queue "+inputQName);
} if (_queueManager != null)
{
_queueManager.disconnect();
System.out.println("EmptyQ: Disconnect from "+qManager);
}
}
}
catch (MQException e1)
{
System.err.println("EmptyQ: MQException: " + e1.getLocalizedMessage());
}
}
}

下面,再贴一个我用shell写的壳:

 #!/bin/bash
# File: clearMQ.sh
# Whatfor:empty the queue's curdepth WHEN IT OVERSTOCKS,
# and all the performance depends on EmptyQ.class,
# which [@author Roger Lacroix, Capitalware Inc.] made it.thx this guy:)
# Auth: nextgodhand@163.com
# Usage: ./clearMQ.sh <QueueManagerName> <QueueName> [CHANNEL_NAME]
# #set user env.
#. ~/.bash_profile if [ $# -lt ]; then
echo "Usage: $0 <QueueManagerName> <QueueName> [CHANNEL_NAME]"
exit
fi QMGR=$
QNME=$
CHNN=$ if [ -z "`dspmq|grep "$QMGR"`" ]; then
echo "Error: $QMGR not running."
exit
fi if [ -z "`echo "DIS QUEUE(*)"|runmqsc $QMGR|grep "($QNME)"`" ]; then
echo "Error: $QNME not exists in $QMGR."
exit
fi if [ -z "$CHNN" ]; then
CHNN="SYSTEM.ADMIN.SVRCONN"
fi CCSID=`echo "DIS QMGR CCSID"|runmqsc $QMGR|grep -oE "CCSID\([0-9]+\)"|awk -F'(' '{printf "%d",$2}'`
PORT=`ps -fumqm|grep runmqlsr|grep " $QMGR "|awk '{print $NF}'` java -cp .:$CLASSPATH EmptyQ -s $CCSID -h localhost -c $CHNN -p $PORT -m $QMGR -q $QNME

使用起来很方便:

./clearMQ.sh mq_xxx queue_yyy

MQ队列管理的更多相关文章

  1. MQ队列管理器搭建(三)

    MQ集群及网关队列管理器的搭建 描述:     如上图所示,为MQ的集群搭建部署图.CLUSTERA.CLUSTERB分别是两个集群,其中Qm1-Qm3.GateWayA为CLUSTERA集群中的队列 ...

  2. MQ队列管理器搭建(二)

    MQ级联方式使用场景 使用场景:     如上图所示,Application1与Application2要进行通信或者消息互换,使用MQ中间件作为中介.上图中,Application1与Applica ...

  3. MQ队列管理器搭建(一)

    多应用单MQ使用场景 如上图所示,MQ独立安装,或者与其中一个应用同处一机.Application1与Application2要进行通信,但因为跨系统,所以引入中间件来实现需求.   Applicat ...

  4. mq队列管理器命令

    dspmq: 队列管理器显示 QMCIPSA-------队列管理器 runmqsc QMSAA  运行查找Q队列名 运行MQ命令 runmqsc QmgrName 如果是默认队列管理器,可以不带其名 ...

  5. MQ队列及常见操作

    一. 创建MQ队列管理器 1.1准备工作 到所安装websphere mq的机子上,进入/opt/mm/bin目录下,查询相关mq的情况,通过命令行./dspmq. 创建mq队列管理器的的时候要用mq ...

  6. com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器提供的安全性认证无效

    com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器“zm_queue_manager”提供的安全性认证无效, ...

  7. Java调用MQ队列

    IBM MQ 6.0中设置两个队列,(远程队列.通道之类都不设置). 队列管理器是XIR_QM_1502 队列名称是ESBREQ IP地址是10.23.117.134(远程的一台电脑,跟我的电脑不在一 ...

  8. postfix队列管理

    队列管理单元的服务器程序--qmgr,是整个postfix系统的中心枢纽.所有邮件,包括等待送出与从外界收进来的,都必须通过队列.了解队列的运行原理以及postfix如何处理队列,有助于你解决问题.  ...

  9. hadoop队列管理(指定queue跑程序)

    hadoop 升级到cdh5后,队列管理被取消,而是统一用资源池分配. hadoop2.0版本,Hadoop采用了平级队列组织方式,,管理员可将用户分到若干个扁平队列中,在每个队列中,可指定一个或几个 ...

随机推荐

  1. B计划

    简介:从一个初学者的角度来讲,要从六个方面来对计算机来做一个大约的了解: 计算机的组成: 电脑配置: 操作系统: CDEF盘: 正确的开关机(主要是关机): 常用软件: 1. 电脑由哪几部分组成?   ...

  2. textView布局的一点体会

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  3. Redis Sentinel 机制与用法(二)

    概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如 master宕机了,Redis本身(包括它的很多客户端) ...

  4. Angular随笔第一课

    一.调用angular 加载angular.js库(可以从google的cdn中加载类库,https://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/a ...

  5. VR全景:实体店与互联网的完美结合

    VR元年已过,VR项目.VR创业潮转为理性,VR行业分为两个方向:硬件和内容.硬件又分为VR头显和辅助设备,内容又分为VR全景和VR虚拟内容,如游戏.娱乐.根据行业划分为VR+购物,VR+教育,VR+ ...

  6. 【小练习03】CSS-表格(table)--天气预报

    表格基础知识链接:http://blog.csdn.net/baidu_37107022/article/details/71713281 练习要求实现如下效果图: 代码演示 <!DOCTYPE ...

  7. BUGKUctf-web-writeup

    ---恢复内容开始--- 找到了个ctf平台.里面的web挺多的.终于将web题目写的差不多了. Web 签到题 加群就可以了 Web2 直接F12就看到了 文件上传测试 Burp抓包 文件名改成 1 ...

  8. 【FPGA】高斯白噪声的Verilog实现

    本文章主要讨论高斯白噪声的FPGA实现.简单的方法可以采用在Matlab中产生服从一定均值和方差的I.Q两路噪声信号.然后将两组数据存在FPGA中进行回放,以此来产生高斯白噪声.这种方法优点是产生方法 ...

  9. Java之戳中痛点 - (7)善用Java整型缓存池

    先看一段代码: package com.test; import java.util.Scanner; public class IntegerCache { public static void m ...

  10. 自己整理的openresty安装步骤

    这几天一直在研究对webapi的限流和名单的问题,于是看了开涛博客的方案,于是就用到了openresty,一个把Nginx和lua集成的东西. 下面就是整理的安装方案(简单使用基本可以这么安装) 下载 ...