【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの?


こうも天気がよいと、なんだかどうでもよくなりますね。メタボドンと来い!ってかんじです。


さて、現在募集中の TechEd ライトニングトーク 登壇者に向けたサンプルスライドを作ってみたわけですが、せっかくなので少し詳細に解説したいと思います。



【TechEd】ライトニングトーク サンプル ~ MSMQ を使用した確実なユーザー登録 ~


MSMQ って、そもそもご存知でしょうか?意識してインストールしないと「コンピュータの管理」にも出てこないので、「始めて聞いた」という方もいらっしゃるかもしれません。


Microsoft Message Queueing(Microsoft Message Queue Service てのは古い言い方だったようです。失礼しまし) の略で、分散メッセージングアプリケーションを開発するための基盤となるサービスです…と書くと、なんか IT Pro とは無縁のもののように思えてきますが、これがまた使ってみるとやめられなくなるくらい面白いです。Developer だけに触らせていたのではもったいないので、IT Pro も使いましょう!


で、ここでいう「メッセージ」という言葉ですが、これはメールのようなものだと思ってください。次々と送られてくるメッセージをうまく捌くためのエンジンが MSMQ です。


では、MSMQ がなんでユーザー登録にとって便利なのかということですが。


ユーザー登録は、基本的にシーケンシャルな処理です。おそらく、スクリプトには以下のようなコードを書くことになるでしょう。



  1. ユーザー一覧が書かれたCSVファイルを開く

  2. CSVファイルを1行よみとる

  3. ユーザーIDをキーにしてActive Directory 上にユーザーを作成

  4. 作成できたら氏名やホームディレクトリ等をセット

  5. 登録結果の確認処理後、ログを吐き出し

  6. 2.に戻って繰り返し

例えば10000人のユーザーを登録する場合、すべての処理をひとまずやってしまってから、ログから正常に終了したかどうかを確認する必要があります。処理に慣れている方であれば、「失敗したユーザー一覧」を別に吐き出して、それをベースに再登録を行ったりなんてことも考えるのではないでしょうか。


処理が失敗する原因はいくつか考えられます。



  • ネットワーク障害

  • ドメインコントローラ側の障害

  • 登録データの不備

  • コードの不備(想定外の入力データ等)

いずれにしても重要なのは、失敗した後のことがきちんと想定されているかどうかということです。


そのためにも、ILM などのパッケージを導入するのがお勧めなわけですが、そうは言ってもお金がかかる世界ですから内々でなんとかできるものならなんとかしたい。。と思うのが人情ってものです。


そこで、OS標準機能である MSMQ を使ってしまい、エラー処理に関するコーディングを簡略化してしまおうと。


以下の図をご覧ください。


クリックで拡大


この図の上に書かれた流れが、いまお話した普通の方法です。


下に書かれているのがMSMQを使用した方法です。


「普通の方法」の場合、エラー処理はバッチ処理全体として考慮する必要があるため、制御が面倒になります。コードも増えますので、ミスも発生しやすく、出来上がってみれば完全なスパゲッティコード(うわ、古い表現)になってしまうこともシバシバ。


#もしかして、それは僕の頭が悪いから??


そこで、従来バッチ的に行っていたユーザー登録を、一人づつのジョブに分割し、コードはあくまでも「一人を登録するための処理」として記述すればよいため、コーディングを簡略化することができます。


MSMQ には、「トリガー」という便利が機能が用意されており、



ジョブ(メッセージ)が生成されたらあらかじめ関連付けられたプログラムを自動実行する


ことができます。これがまた、たまらなくうれしいです。もちろん、リアルタイムに処理されます。


トリガー機能を自身でコーディングしようとしたら…WMIでファイルシステムの変更を検出して、ファイルを正当性をチェックし、問題が無ければスクリプトを起動する…なんて処理をサービスプログラムとして作成して常駐化しなければなりません。それだけなら「なんだ簡単ジャン」という声もあるかもしれませんが、インストーラを作ったり、環境設定用のGUIを作ったり、ドキュメントを作ったり…納品するまでには長い道のりをたどらなければなりません。


MSMQ のトリガー機能を使用することで、作成するスクリプトは増えますが、個々のスクリプトが完全に独立しているためメンテナンス性や生産性が向上しますし、キューを増やすことで複数の処理を平行に動かすことも可能になります。


例えば、大量のユーザー登録を行っている最中にパスワードリセットを行わなければならない場合には、そちらを優先して行いたいですよね。その場合には、パスワード変更用のキューを独立させておけばユーザー登録とパラレルに処理が走ります。


また、もし処理が失敗してしまったら、いちいちログを吐き出してやり直すなんてことは考えず、ジョブをいったん「失敗キュー」に移動後、再び元に戻してあげれば、トリガーによって処理を繰り返すことが可能です。もちろん、「すぐに繰り返さずに、すこし待つ」なんて考慮も必要ではありますが、バッチ処理で考慮するよりははるかにシンプルに実装できます。


どうでしょう。使いたくなりましたよね、MSMQ。


次回は、MSMQ のインストールと環境設定を行います。


MSMQ についてもっと勉強したい!という方は、MSDN の以下のページをご覧ください。日本語で丁寧に解説されています。



Microsoft Message Queueing(日本語)
http://msdn.microsoft.com/ja-jp/library/bb970313.aspx



メッセージキュー SDKドキュメント(日本語)
http://msdn.microsoft.com/ja-jp/library/cc448132.aspx


OSにもヘルプがついていますので、そちらもご覧ください。

Comments (10)

  1. 匿名 より:

    先日、 TechEd ライトニングトーク 登壇者募集! という形でご紹介させていただきましたが、他の方もブログにて紹介しています。ということで、久しぶりにブログの記事を紹介してみようと思います。 IT

  2. 匿名 より:

    あぁ、タスポどうしよう…。 「MSMQ を使って確実なユーザー登録を行う」シリーズの 2回目です。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの?

  3. 匿名 より:

    MSMQでユーザーを登録するシリーズです。もうすこしで完結します。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの? 【IDM】MSMQ を使って確実なユーザー登録を行う

  4. 匿名 より:

    さてもう一息ですね。第8回です。 #これまでの投稿一覧はこの投稿の最下段に書いておきます。 前回 作成したスクリプトをキューのルールとして登録する前に、MSMQ運用に必要な知識について書いておきます。知識というよりも、クセですね。

  5. 匿名 より:

    MSMQを使用してユーザー登録を工夫しようシリーズの第4回目です。 前回の登録から..なんと半年…Tech・Ed 2008 では「続き待ってます」と言われておりました…すみませんです。他にも書きかけの記事があったりもして…えーと、えーと、干支が変わる前になんとかしたいかなぁと思う今日この頃です(あ、なんか今日

  6. 匿名 より:

    いまさらですが、「忘れられた日本人」という本がおもしろくてたまりません。民俗学なんて高尚な話はひとまずおいといても、面白いです。そして思うことは、はたして自分が80歳になったとき、人に語って聞かせる話を持っているだろうか…Message

  7. 匿名 より:

    今年の営業日も残り少なくなってきました。私がいるオフィスも、心なしか人が少ないような…いや確実に少ない。みなさん、年末年始は休めそうですか?私は…うーん…びみょーです。 #これまでの投稿一覧は、この投稿の最下段に掲載してあります。

  8. 匿名 より:

    4/2 Windows Server 管理の自動化セミナー 基本編+応用編1 で使用したスクリプト 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの? 【IDM】MSMQ

  9. 匿名 より:

    明日23日が休みだってことに、いま気付きました。 MSMQでユーザー登録シリーズです。で、すいません。最終回じゃないです。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの?

  10. 匿名 より:

    もう金曜の夜か。一週間が速すぎます。 「MSMQ を使って確実なユーザー登録を行う」シリーズの3回目です。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの?

Skip to main content