Amazon SQSをColdFusion10とAWS SDK for javaの組み合わせで操作する #2 | sendMessage
前回はキューの作成で力尽きましたので、今回は実際にsendMessageを使ってメッセージの送信を体験してみます。
動作させた環境
- Windows7 64Bit
- MySQL5.5
- ColdFusion10 デベロッパー版
- AWS SDK for java 1.5.3
Amazon SQSのsendMessageを使う
まずは簡単な入力画面として、『送信するメッセージの内容を入力する』ための簡易画面を用意します。( aws_sqs_send.cfm )
<cfcontent type="text/html; charset=utf-8"> <cfprocessingdirective pageEncoding="utf-8" suppressWhitespace="true"> <cfoutput> <html lang="ja"> <head> <meta charset="utf-8"> <title>Coldfusion + AWS SDK for java SQS sendMessage Sample</title> <link href="css/bootstrap.css" rel="stylesheet"> </head> <body> <p></p> <div class="container"> <div class="row"> <form class="form-horizontal" method="post" action="aws_sqs_send_action.cfm" > <div class="control-group"> <label class="control-label">送信メッセージ</label> <div class="controls"> <input type="text" class="span3" name="sqs_message" placeholder="送信メッセージを入力"> <button type="submit" class="btn btn-small btn-info">送信</button> </div> </div> </form> </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script src="js/bootstrap.min.js"></script> </cfoutput> </cfprocessingdirective> </body> </html>
画面は下記の様にシンプルです。
次にポスト処理を行うCFMLを作成します。
- ポストされてきたメッセージの内容を#1で作ったキュー(tsukuma-SQSTest)に送信します。
- SQSへメッセージ送信後、messageIDを取得します。
- 取得したmessageIDをSQS JOBテーブルに書き込みます
- ステータスはreservedとして書き込みます
SQS JOB管理テーブルはシンプルに作りました。(MySQL上に作ってます。)
ポスト先のCFMLは以下の様に作成しました。( aws_sqs_send_action.cfm )
<cfcontent type="text/html; charset=utf-8"> <cfprocessingdirective pageEncoding="utf-8" suppressWhitespace="true"> <cflock scope = "Session" timeout = "30" type = "Exclusive"> <cfset aws_AK = #accessKeyId#> <!--- Your Access Key ---> <cfset aws_SK = #secretAccessKey#> <!--- Your Secret Key ---> <cfset APL_Datasource = #Datasource#> <cfset APL_QueueName = #QueueName#> <cfset APL_Sqs_Url = #SQS_Url#> </cflock> <cfoutput> <html lang="ja"> <head> <meta charset="utf-8"> <title>Coldfusion + AWS SDK for java SQS sendMessage Sample</title> </head> <body> <cfif isDefined("form.sqs_message") and #form.sqs_message# is ""> 送信メッセージが指定されていません。 <cfabort> </cfif> <cfset awscreds = createObject("java","com.amazonaws.auth.BasicAWSCredentials").init(aws_AK,aws_SK)> <cfset SQSClient = createObject("java","com.amazonaws.services.sqs.AmazonSQSClient").init(awscreds)> <!--- SQSのURL ---> <cfset sqs_queue_url = #APL_Sqs_Url# & #APL_QueueName#> <!--- 初期化 ---> <cfset SQSmessageRequest = createObject("java","com.amazonaws.services.sqs.model.SendMessageRequest").init()> <cfset sqstest = SQSmessageRequest.setQueueUrl(sqs_queue_url)> <cfset sqstest = SQSmessageRequest.setMessageBody(form.sqs_message)> <!--- メッセージ送信 ---> <cfset sqs_send_test = SQSClient.sendMessage(SQSmessageRequest)> メッセージIDは<cfdump var="#sqs_send_test.getMessageId()#">です <cfset message_id = #sqs_send_test.getMessageId()#> <!--- SQS JOB管理テーブルへmessageIDとメッセージ内容を書き込み まだSQSのメッセージを受け取って処理する前なのでstatusはreservedとしてD/Bへ登録しておきます。 ---> <cfquery name="sqs_data_ins" datasource="#APL_Datasource#"> insert into sqs_job (sqs_message_id,sqs_receipt_message,status) values ('#message_id#','#form.sqs_message#','reserved') </cfquery> </cfoutput> </cfprocessingdirective> </body> </html>
実際に画面から送信メッセージの入力欄に『一つ目のメッセージ』と入力してメッセージを送信してみます。
その実行結果です。(messageIDが返ってきています。)
Management Consoleにログインして確認してみました。
正しくキューにメッセージが届いていることが確認できますね。今回はSQSへのメッセージ送信までにします。次回はSQSのメッセージの受信と処理完了時にSQSからメッセージを削除するところまでを体験してみたいと思います。