XMS.net (キューでのメッセージのリッスンを時々あきらめるように見える Windows サービス) を使用する IBM の Websphere MQ で問題が発生しているため、いくつかのキューの深さ (またはメッセージの数) を監視する簡単なアプリケーションを作成したいと考えています。キューの深さが特定のしきい値を超えたときに誰かに警告できるようにします。このアプリケーションは、特定の間隔でタスク スケジューラによって起動され、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 を使用することはまったく可能ですか?