HTTP timeout の設定

AP4R に put されたメッセージは、dispatcher と呼ばれるスレッドによって、メッセージのヘッダ部分に指定された宛先に送信されます。
このときデフォルトは HTTP PUT をプロトコルとして使用しますが、従来のバージョンでは、タイムアウトの設定がありませんでした。このため、非同期処理の実行先で処理が終わらない状態になると、その処理を送信した dispatcher スレッドが占有されたままになる恐れがありました。
dispatcher の数を少なく設定している場合は痛いです。


で、パッチをいただきましたので、昨日リリースした ap4r-0.3.6 に取り込みました。


以下のように設定ファイルを記述すると HTTP の read 待ちを制限できます。
単位は秒です。

---
dispatchers:
  -
    targets: queue.*
    threads: 1
    http:
      timeout: 600

今のとここれだけですが、

  • 複数の dispatcher にまたがったグローバルな設定方法や、
  • ほかのプロトコルSOAPXML-RPC での設定

も今後のバージョンで検討しています。


前者のグローバルな設定というのは下記のようなイメージです。これですべての HTTP dispatcer が影響を受けることになります。
(個別に dispatcher ごとに設定している場合はそちらが優先、のつもり)

---
dispatchers:
  -
    targets: queue.*
    threads: 1

dispatch_protocols:
  http:
  timeout: 600


ただ...、dispatch_protocols という名前がいまひとつかなぁという気もしています。
もっといいネーミング or もっといい解決案ってありますかね? (^^;