如何从 s3 自动获取 java 中的文件?
How can I automatically get file in java from s3?
@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
public class 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 中上传的实际数据吗?
从你的问题中不清楚消息包含什么,但如果消息包含 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。
@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
public class 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 中上传的实际数据吗?
从你的问题中不清楚消息包含什么,但如果消息包含 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。