由于我们在使用 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()
or GetLongProperty()
,但我不知道要使用哪个常量(我见过 IBM.XMS.MQC.MQIA_CURRENT_Q_DEPTH 但它包含一个int
并Get...Property()
期望一个string
作为参数)。
长话短说:我将如何以上述代码为起点检索队列深度?使用 XMS.Net 有可能吗?