第13章 Beanstalk


Beanstalk コンポーネント

Camel 2.15 で利用可能
camel-beanstalk プロジェクトは、Beantalk ジョブのジョブの取得および後処理のための Camel コンポーネントを提供します。
Beanstalk ジョブライフサイクルの詳細は、Beanstalk プロトコル を参照してください。

Dependencies

Maven ユーザーは以下の依存関係を追加する必要があります。 pom.xml
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-beanstalk</artifactId>
  <version>${camel-version}</version>
</dependency>
Copy to Clipboard Toggle word wrap
ここで、${camel-version} は実際のバージョンの Camel (2.15.0 以降)に置き換える必要があります。

URI 形式

beanstalk://[host[:port]][/tube][?options]
Copy to Clipboard Toggle word wrap
Beanstalk のデフォルトは port または hostport のいずれかを省略できます(localhost と 11300)。tube を省略すると、Beanstalk コンポーネントは "default" という名前の tube を使用します。
リッスンしている場合、おそらくいくつかのツーブからのジョブを監視することをお勧めします。たとえば、プラス記号で区切ります。
beanstalk://localhost:11300/tube1+tube2
Copy to Clipboard Toggle word wrap
Tube 名はデコードされるため、Tube の名前に + や ? などの特殊文字が含まれている場合は、適切に URL エンコードするか、RAW 構文を使用する必要があります。詳細は、を参照してください
このようにして、ジョブを Beantalk に書いた時に複数の tub を指定できません。

一般的な URI オプション

Expand
名前
デフォルト値
説明
jobPriority 1000 ジョブの優先度。(0 は最大で、Beantalk プロトコルを参照)
jobDelay 0 ジョブの遅延(秒単位)。
jobTimeToRun 60 秒単位でのジョブの実行時間(0 の場合)、beanstalkd デーモンがそれを 1 に自動的に引き上げます。Beanstalk プロトコルを参照してください)。

プロデューサー UIR オプション

プロデューサーの動作は command パラメーターの影響を受けます。このパラメーターは、ジョブの動作を指示します。
Expand
名前
デフォルト値
説明
command put
  • put ジョブを Beantalk に配置する手段。ジョブボディーは Camel メッセージボディーに指定されます。ジョブ ID は beanstalk.jobId メッセージヘッダーで返されます。
  • deleterelease、または touch では、メッセージヘッダー beanstalk.jobId のジョブ ID が必要です。bury操作の結果が beanstalk.result メッセージヘッダーで返されます。
  • kick メッセージボディーで起動するジョブの数を想定し、メッセージヘッダー beanstalk.result で実際に開始するジョブの数を返します。

コンシューマー UIR オプション

コンシューマーは、予約された直後にジョブを削除したり、Camel ルートが処理するまで待ちます。最初のシナリオはメッセージキューに似ていますが、2 番目のシナリオは job queue に似ています。この動作は、consumer.awaitJob パラメーターによって制御されます。このパラメーターは、デフォルトで true に相当します(Beantalkd の性質)。
同期されると、コンシューマーは正常なジョブの完了時に delete を呼び出して、失敗時に bury を呼び出します。URI で consumer.onFailure パラメーターを指定すると、失敗時に実行するコマンドを選択できます。burydelete または release の値を取ることができます。
JavaBeanstalkClient ライブラリーの同じパラメーターに対応するブール値パラメーター consumer.useBlockIO があります。デフォルトでは、true です。
release を指定する際には、失敗したジョブが同じ tube ですぐに利用可能になり、コンシューマーが再度取得を試みるため注意してください。release を指定し、jobDelay を指定できます。
Expand
名前
デフォルト値
説明
onFailure bury 処理に失敗した場合に使用するコマンド。bury、delete、または release のいずれかを選択できます。
useBlockIO true blockIO を使用するかどうか。
awaitJob true beanstalk からジョブを確認する前にジョブが完了するまで待機するかどうか。
beanstalk コンシューマーはスケジュールされたポーリングコンシューマーです。これは、コンシューマーがポーリングする頻度など、設定可能なオプションが多いことを意味します。詳細は コンシューマーのポーリング を参照してください。

コンシューマーヘッダー

コンシューマーは、Exchange メッセージに複数のジョブヘッダーを保存します。
Expand
プロパティー
タイプ
説明
beanstalk.jobId long ジョブ ID:
beanstalk.tube string このジョブを含む tube の名前
beanstalk.state string "ready" または "delayed" または "reserved" または "buried" (予約されている必要があります)
beanstalk.priority long 優先度値セット
beanstalk.age int このジョブを作成した put コマンドからの秒単位の時間
beanstalk.time-left int サーバーがこのジョブを準備状態にあるキューに配置するまでの秒数
beanstalk.timeouts int 予約中にこのジョブがタイムアウトした回数
beanstalk.releases int クライアントが予約からこのジョブをリリースした回数
beanstalk.buries int このジョブが入念された回数
beanstalk.kicks int このジョブが起動した回数

この Camel コンポーネントを使用すると、ジョブを処理し、それらを Beanstalkd デーモンに提供することができます。簡単なデモルートは以下のようになります。
from("beanstalk:testTube").
   log("Processing job #${property.beanstalk.jobId} with body ${in.body}").
   process(new Processor() {
     @Override
     public void process(Exchange exchange) {
       // try to make integer value out of body
       exchange.getIn().setBody( Integer.valueOf(exchange.getIn().getBody(classOf[String])) );
     }
   }).
   log("Parsed job #${property.beanstalk.jobId} to body ${in.body}");
Copy to Clipboard Toggle word wrap
from("timer:dig?period=30seconds").
   setBody(constant(10)).log("Kick ${in.body} buried/delayed tasks").
   to("beanstalk:testTube?command=kick");
Copy to Clipboard Toggle word wrap
最初のルートでは、tube "testTube" で新しいジョブをリッスンしています。受け取ったら、メッセージボディーの整数値を解析しようとしています。正常に完了するとログを記録し、この正常な交換の完了により、Camel コンポーネントを使用して Beantalk からこのジョブを自動的に 削除 します。一方、ジョブデータを解析できない場合、エクスチェンジは失敗して、Camel コンポーネントはデフォルトでこれをバウズします。これにより、後で処理したり、失敗したジョブを手動で検査したりできます。
そのため、2 つ目のルートは Beanstalk に定期的に要求して、buried および/または delayed 状態から通常のキューに 10 個のジョブを 開始 します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat