Amazon SQSをColdFusion10とAWS SDK for javaの組み合わせで操作する #2 | sendMessage

2013.08.19

前回はキューの作成で力尽きましたので、今回は実際に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>

画面は下記の様にシンプルです。

aws_sqs1

次にポスト処理を行うCFMLを作成します。

  1. ポストされてきたメッセージの内容を#1で作ったキュー(tsukuma-SQSTest)に送信します。
  2. SQSへメッセージ送信後、messageIDを取得します。
  3. 取得したmessageIDをSQS JOBテーブルに書き込みます
  4. ステータスはreservedとして書き込みます

SQS JOB管理テーブルはシンプルに作りました。(MySQL上に作ってます。)

aws_sqs5

ポスト先の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>

実際に画面から送信メッセージの入力欄に『一つ目のメッセージ』と入力してメッセージを送信してみます。

aws_sqs5_1

その実行結果です。(messageIDが返ってきています。)

aws_sqs6

Management Consoleにログインして確認してみました。

aws_sqs7

正しくキューにメッセージが届いていることが確認できますね。今回はSQSへのメッセージ送信までにします。次回はSQSのメッセージの受信と処理完了時にSQSからメッセージを削除するところまでを体験してみたいと思います。