この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
前回はキューの作成で力尽きましたので、今回は実際に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からメッセージを削除するところまでを体験してみたいと思います。