読者です 読者をやめる 読者になる 読者になる

GeekFactory

int128.hatenablog.com

一定スループットでテストメールを送信するツール

java インフラ

一定のスループットでテストメールを送信するツールを紹介します。2年前に作ったものを掘り出しました。JMeterが使えない環境で役に立つと思います。

1クラスで完結するように書いたので、クラスファイルとプロパティファイルを配置するだけで使えます。以下のようなプロパティファイルをクラスファイルと同じフォルダに配置してください。

# SendMail.properties
SendMail.requestPerSecond=スループット(リクエスト/秒)
SendMail.requestCount=リクエスト数
SendMail.threadPoolSize=スレッドプールサイズ
SendMail.smtpHost=SMTPホスト
SendMail.smtpFrom=差出人アドレス
SendMail.smtpTo=宛先アドレス

JRE 5.0以降と mail.jar が必要です。JRE 6以降であれば activation.jar はいらないはず。詳しくは http://www.oracle.com/technetwork/java/javamail/index.html から入手してください。デフォルトパッケージで使った方が楽なので package 行は削除するとよいでしょう。

こんな感じで使います:

$ javac SendMail.java
$ vim SendMail.properties
$ java -cp .:mail.jar SendMail

このツールを作ったときは、多段構成になっているSMTPサーバの障害試験で使ったように記憶しています:

  • 障害時にリレー先が切り替わること。
  • 負荷が掛かっている状態でSMTPサーバが停止してもメールがロストしないこと。

ScheduledExecutorService を使って一定スループットでタスクを実行しているだけなので、SMTP以外にも応用できると思います。性能試験に使う場合は、スケジューリング中の時刻誤差を吸収した方がベターと思います(ソースコードのTODOに書いています)。