【发布时间】:2012-07-16 03:17:15
【问题描述】:
由于我们在使用 XMS.net 的 IBM 的 Websphere MQ 时遇到了一些问题(Windows 服务有时似乎放弃了侦听队列中的消息),我们希望创建一个简单的应用程序来监控某些队列的深度(或队列上的消息数),以便能够在队列深度超过某个阈值时提醒某人。该应用程序将由任务调度程序按特定时间间隔启动,并“读出”X 个队列的队列深度(可能还有其他一些统计信息)。
我们的 Windows 服务正在使用以下代码,我希望我可以将相同的“知识”用于我们的“监控”应用程序。
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
//Read config values
string QueueManager = ConfigurationManager.AppSettings["queuemanager"];
string Channel = ConfigurationManager.AppSettings["channel"];
string Queue = ConfigurationManager.AppSettings["queue"];
string HostIP = ConfigurationManager.AppSettings["host"];
int Port = int.Parse(ConfigurationManager.AppSettings["port"]);
//Create connection
var factoryfactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
var connectionfactory = factoryfactory.CreateConnectionFactory();
connectionfactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, QueueManager);
connectionfactory.SetStringProperty(XMSC.WMQ_HOST_NAME, HostIP);
connectionfactory.SetIntProperty(XMSC.WMQ_PORT, Port);
connectionfactory.SetStringProperty(XMSC.WMQ_CHANNEL, Channel);
connectionfactory.SetIntProperty(XMSC.WMQ_BROKER_VERSION, XMSC.WMQ_BROKER_V2);
connectionfactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT_UNMANAGED);
Console.WriteLine("Creating connection");
var connection = connectionfactory.CreateConnection();
connection.ExceptionListener = new ExceptionListener(OnXMSExceptionReceived);
//Create a_session
Console.WriteLine("Creating sessions");
var session = connection.CreateSession(false, AcknowledgeMode.ClientAcknowledge);
//Create queue
Console.WriteLine("Creating queue");
var queue = session.CreateQueue(string.Format("queue://{0}/{1}", QueueManager, Queue));
我浏览了session、queue 等的属性,但当然没有“当前队列深度”属性。我可以在这些对象上使用GetIntProperty() 或GetLongProperty(),但我不知道使用哪个常量(我见过IBM.XMS.MQC.MQIA_CURRENT_Q_DEPTH,但它包含int 和Get...Property() 需要@ 987654328@作为参数)。
长话短说:我将如何以上述代码为起点检索队列深度?使用 XMS.Net 有可能吗?
【问题讨论】: