@Value("${amazon.sqs.queue.endpoint}")
private String endpoint;
@Value("${amazon.sqs.queue.name}")
private String queueName;
@Autowired
private SQSListener sqsListener;
@Bean
public DefaultMessageListenerContainer jmsListenerContainer() throws JMSException {
SQSConnectionFactory sqsConnectionFactory = SQSConnectionFactory.builder()
.withAWSCredentialsProvider(new DefaultAWSCredentialsProviderChain())
.withEndpoint(endpoint)
.withAWSCredentialsProvider(new ClasspathPropertiesFileCredentialsProvider("AwsCredentials-sqs.properties"))
.withNumberOfMessagesToPrefetch(10).build();
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
dmlc.setConnectionFactory(sqsConnectionFactory);
dmlc.setDestinationName(queueName);
dmlc.setConcurrentConsumers(1);
dmlc.setMaxConcurrentConsumers(100);
dmlc.setMessageListener(sqsListener);
return dmlc;
}
@Component
公共類 SQSListener 實作 MessageListener {
private static final Logger LOGGER = LoggerFactory.getLogger(SQSListener.class);
@Override
public void onMessage(Message message) {
try {
// Cast the recei
ved message as TextMessage and print the text to screen.
System.out.println("Received: " ((TextMessage) message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
我在 s3 中添加了一個檔案,然后將訊息發送到 sqs 佇列。收到此訊息后,我可以獲得在 s3 中上傳的實際資料嗎?
uj5u.com熱心網友回復:
從您的問題中不清楚訊息包含什么,但如果訊息包含 S3 存盤桶和密鑰,那么是的,您可以使用 S3 API 下載它。
添加以下依賴項
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
</dependency>
此邏輯將創建 S3 客戶端并下載物件。
AwsCredentials credentials = AwsBasicCredentials.create(
"<AWS Access Key>",
"<AWS Secret>"
);
S3Client s3client = S3Client.builder()
.region(Region.US_EAST_1) // or whatever region you're in
.credentialsProvider(() -> credentials) // credentials created above (or preferably injected)
.build();
GetObjectRequest getObjectRequest = GetObjectRequest.builder()
.bucket("the bucket") // the bucket that contains the object, from message maybe?
.key("the key") // the key to the object, from message maybe?
.build();
ResponseInputStream<GetObjectResponse> responseInputStream = s3client.getObject(getObjectRequest);
這將為您提供一個可以讀取的 InputStream。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/415543.html
標籤:
