#AWS SQSPutコンポーネントの特徴
AWSのAmazon Simple Queue Service (SQS)へメッセージを保存するコンポーネントで、指定するのはメッセージを入れるキュー(URL)のみ。
メッセージは入力ストリームが使用されて、入力ストリームをBase64エンコードしたものになる。
#AWS SQSGetコンポーネントの特徴
AWS SQSPutコンポーネントが保存したメッセージをSQSから取得するコンポーネント。
SQSから見て1回も受信されたことのない未読のメッセージのみを取得することができる。
取得したメッセージは他(別サーバーで動作しているASTERIA WARPのフローなど)が取得できない期間を秒で指定できる(可視性タイムアウト値を指定できる)。
取得したメッセージをフローで正常に処理した後に削除することができる。
#使ってみる
- まず、メッセージをキューへ保存する。
テキストストリームの値をキューへ保存してみる。
コネクションが設定されたAWS SQS Get/Putコンポーネントをダブルクリックするとキューのリストから使用するキューを選択することができます。
特に考えることなくSQSのキューへメッセージを保存することができました。
- メッセージを取得してみる。
Startコンポーネントでフローをトランザクション化しています。
SQSから取得したメッセージは、60秒以内にサブフローが処理をする予定にしています。
(プロパティ:メッセージ可視タイムアウト(秒)へ「60」を設定)
正常に処理が終了した場合、取得したメッセージはSQSから削除されますが、サブフローでの処理でExceptionが発生した場合はSQSのメッセージを削除せずに60秒後に他のフローが処理できるようにしています。
(プロパティ:コミット時の処理へ「メッセージを削除」を設定)
キューからのメッセージ取得も簡単にできました。
#気になる点
- Base64
AWS SQS Putコンポーネントがメッセージをキューへ保存するとメッセージはBase64されているので、AWSのコンソールで表示されるメッセージの詳細もBase64のままで内容は一見わからない。
AWS SQS Putコンポーネントが保存したメッセージはAWS SQS Getコンポーネントが取得するならばよいが、他のシステムが取得する場合を考えると使いづらい。
Base64されていないメッセージをAWS SQS Getコンポーネントで取得すると「java.lang.NullPointerException」が発生する場合があるようです。これはバグとして報告しておきます。このバグが修正されればキューへ「デッドレターキュー設定」を行うことで、間違って他のシステムがメッセージを保存しても処理を継続することが可能になります。
- メッセージ属性未対応
メッセージ属性をコンポーネントのカテゴリープロパティなどで設定できれば速度と効率を向上できそうです。