本範例在locahost的Java應用程式以AWS的SDK aws-sdk-java-v2
從Kinesis Data Streams取得資料。
範例環境:
- Java 17
- Maven
Prerequisites
參考「AWS 建立IAM管理使用者及credentials」設定存取AWS需要的IAM管理員credentials。
參考「AWS console建立SQS queue範例」建立一個名稱為DemoQueue
的SQS queue並發送一個"hello"訊息。
下載AWS SDK for Java 2.x
在專案的pom.xml
加入以下需要的AWS SDK for Java的SQS依賴。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.16.60</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
</dependency>
設定好pom.xml
在專案執行mvn install
下載依賴。
從SQS queue接收訊息
呼叫SqsClient.builder()
輸入region參數建立SqsClient
來獲取SQS queue的訊息。AWS SDK預設會讀取$HOME/.aws/credentials
的access keys來通過權限驗證。
由於ReceiveMessageRequest.waitTimeSeconds
預設為0為short polling,所以可能接收到空訊息。
Main
package com.abc.demo;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] arges) {
SqsClient sqsClient = SqsClient.builder()
.region(Region.AP_NORTHEAST_1)
.build();
String queueUrl = getQueueUrl(sqsClient);
List<Message> messageList = getMessageListFromSQS(sqsClient, queueUrl);
if (!messageList.isEmpty()) {
var message = messageList.get(0);
System.out.println(message.messageId());
System.out.println(message.body());
}
}
public static String getQueueUrl(SqsClient sqsClient) {
GetQueueUrlResponse getQueueUrlResponse =
sqsClient.getQueueUrl(
GetQueueUrlRequest.builder()
.queueName("DemoQueue")
.build());
return getQueueUrlResponse.queueUrl();
}
public static List<Message> getMessageListFromSQS(SqsClient sqsClient, String queueUrl) {
try {
ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder()
.queueUrl(queueUrl)
.maxNumberOfMessages(1)
.visibilityTimeout(5)
.build();
return sqsClient.receiveMessage(receiveMessageRequest).messages();
} catch (SqsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
}
return Collections.emptyList();
}
}
測試
執行Java應用程式印出接收訊息的Message ID及訊息內容如下。
aadeb265-108f-4d02-9aa3-01b3781e4607
hello
沒有留言:
張貼留言