【问题标题】:How can I automatically get file in java from s3?如何从 s3 自动获取 java 中的文件?
【发布时间】:2022-01-18 15:18:06
【问题描述】:
@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 中上传的实际数据吗?

【问题讨论】:

    标签: java amazon-web-services amazon-s3 amazon-sqs


    【解决方案1】:

    从您的问题中不清楚消息包含什么,但如果消息包含 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。

    【讨论】:

    • 好的很好,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多