LoginSignup
1
0

More than 5 years have passed since last update.

AWS SQS Get/Put コンポーネントを使ってみて

Posted at

AWS SQSPutコンポーネントの特徴

AWSのAmazon Simple Queue Service (SQS)へメッセージを保存するコンポーネントで、指定するのはメッセージを入れるキュー(URL)のみ。
メッセージは入力ストリームが使用されて、入力ストリームをBase64エンコードしたものになる。

AWS SQSGetコンポーネントの特徴

AWS SQSPutコンポーネントが保存したメッセージをSQSから取得するコンポーネント。
SQSから見て1回も受信されたことのない未読のメッセージのみを取得することができる。
取得したメッセージは他(別サーバーで動作しているASTERIA WARPのフローなど)が取得できない期間を秒で指定できる(可視性タイムアウト値を指定できる)。
取得したメッセージをフローで正常に処理した後に削除することができる。

使ってみる

  • まず、メッセージをキューへ保存する。

テキストストリームの値をキューへ保存してみる。

flow1.PNG

コネクションが設定されたAWS SQS Get/Putコンポーネントをダブルクリックするとキューのリストから使用するキューを選択することができます。

dialog.png

特に考えることなくSQSのキューへメッセージを保存することができました。

base64.PNG

  • メッセージを取得してみる。

Startコンポーネントでフローをトランザクション化しています。

flow2.PNG

SQSから取得したメッセージは、60秒以内にサブフローが処理をする予定にしています。
(プロパティ:メッセージ可視タイムアウト(秒)へ「60」を設定)

正常に処理が終了した場合、取得したメッセージはSQSから削除されますが、サブフローでの処理でExceptionが発生した場合はSQSのメッセージを削除せずに60秒後に他のフローが処理できるようにしています。
(プロパティ:コミット時の処理へ「メッセージを削除」を設定)

prop.PNG

キューからのメッセージ取得も簡単にできました。

気になる点

  • Base64

AWS SQS Putコンポーネントがメッセージをキューへ保存するとメッセージはBase64されているので、AWSのコンソールで表示されるメッセージの詳細もBase64のままで内容は一見わからない。

AWS SQS Putコンポーネントが保存したメッセージはAWS SQS Getコンポーネントが取得するならばよいが、他のシステムが取得する場合を考えると使いづらい。

Base64されていないメッセージをAWS SQS Getコンポーネントで取得すると「java.lang.NullPointerException」が発生する場合があるようです。これはバグとして報告しておきます。このバグが修正されればキューへ「デッドレターキュー設定」を行うことで、間違って他のシステムがメッセージを保存しても処理を継続することが可能になります。

  • メッセージ属性未対応

メッセージ属性をコンポーネントのカテゴリープロパティなどで設定できれば速度と効率を向上できそうです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0