Получение ошибок в программе Java для записи в поток Kinesis Firehose

Я пытаюсь просто записать некоторые данные из API (API акций/финансов Google) в свой поток AWS Firehose. Я уже загрузил и установил плагин AWS на Eclipse, настроил свой поток Firehose на AWS, и, кажется, все настроено правильно. Однако я сталкиваюсь с некоторыми проблемами. Следующая строка кажется устаревшей... Я пробовал различные варианты SDK Amazon, но не могу получить правильный код.

AmazonKinesisFirehoseClient firehoseClient = новый AmazonKinesisFirehoseClient(учетные данные);

Далее я получаю некоторые ошибки со следующим. Конкретная ошибка: «Метод setRecord(Record) не определен для типа PutRecordRequest», хотя я взял его непосредственно из справочника API Amazon.

запрос.setRecord(запись);

firehoseClient.putRecord (запрос);

Также возникает ошибка во второй строке выше: "Метод putRecord(com.amazonaws.services.kinesisfirehose.model.PutRecordRequest) в типе AmazonKinesisFirehoseClient неприменим для аргументов (com.amazonaws.services.kinesis.model .ПутРекордрекуест)"

package com.amazonaws.samples;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.ByteBuffer;

import org.apache.http.client.CredentialsProvider;

import com.amazonaws.*;
import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.kinesis.AmazonKinesis;
import com.amazonaws.services.kinesis.AmazonKinesisClient;
import com.amazonaws.services.kinesis.AmazonKinesisClientBuilder;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorFactory;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.InitialPositionInStream;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibConfiguration;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker;
import com.amazonaws.services.kinesis.model.PutRecordRequest;
import com.amazonaws.services.kinesis.model.ResourceNotFoundException;
import com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehoseClient;
import com.amazonaws.services.kinesisfirehose.model.PutRecordBatchRequest;
import com.amazonaws.services.kinesisfirehose.model.Record;

public class FirehoseExample {

    public static void main(String[] args) {
        AWSCredentials credentials = null;

        try {
            credentials = new ProfileCredentialsProvider().getCredentials();
        }

        catch (Exception e) {
            throw new AmazonClientException("Cannot load the credentials from the credential profiles file. "
                    + "Please make sure that your credentials file is at the correct "
                    + "location (/Users/elybenari/.aws/credentials), and is in valid format.", e);
        }

        AmazonKinesisFirehoseClient firehoseClient = new AmazonKinesisFirehoseClient(credentials);
        PutRecordRequest request = new PutRecordRequest();
        request.setStreamName("project-stream");

        Record record = new Record();

        for (int i = 0; i < 20*60; i++){
            try {
                URL url = new URL("https://www.google.com/finance/info?q=NASDAQ:AMZN");
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuilder response = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    response.append(line);  
                }
                reader.close();

                System.out.println(response.toString().replace("\n", "").replaceAll(" ", ""));
                System.out.println("****\n");

                ByteBuffer buffer = ByteBuffer.wrap(response.toString().replace("\n", "").replaceAll(" ", "").getBytes());
                record.setData(buff);

                request.setRecord(record);

                firehoseClient.putRecord(request);

                Thread.sleep(2000);


            }
            catch(Exception e){
                e.printStackTrace();
            }
        }   

    }




    }

person user2411290    schedule 05.04.2017    source источник


Ответы (1)


Проблема в том, что вы включили некоторые классы из Kinesis, не Kinesis Firehose, пакет Java. Например, вы использовали:

import com.amazonaws.services.kinesis.model.PutRecordRequest;

Принимая во внимание, что вы должны были использовать:

import com.amazonaws.services.kinesisfirehose.model.PutRecordRequest;

Kinesis, Kinesis Firehose и Kinesis Analytics — это разные сервисы, несмотря на то, что они относятся к одному потоковому сервису на AWS. Следовательно, у них разные пространства имен пакетов в Java SDK. Если вы начнете с официальной документации здесь, вы найти правильный справочник Java SDK здесь.

EDIT: чтобы ответить на ваш другой вопрос: да, следующее устарело:

AmazonKinesisFirehoseClient firehoseClient = new AmazonKinesisFirehoseClient(credentials);

Вместо этого вы должны использовать следующее:

 AmazonKinesisFirehoseClient firehoseClient = AmazonKinesisFirehoseClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCredentials)).build();

См. официальную документацию здесь о том, как правильно инициализировать AmazonKinesisFirehoseClient.

person ketan vijayvargiya    schedule 05.04.2017
comment
Спасибо... Это было очень полезно!! И последний вопрос: знаете ли вы, как правильно написать эту строку? AmazonKinesisFirehoseClient firehoseClient = новый AmazonKinesisFirehoseClient(учетные данные); - person user2411290; 05.04.2017
comment
Обновил ответ. Не забудьте принять ответ, если он помог! - person ketan vijayvargiya; 05.04.2017
comment
Спасибо за ответ... Когда я добавляю код, который вы мне дали, в точности как есть (за исключением того, что я меняю учетные данные), я получаю следующую ошибку: Несоответствие типов: невозможно преобразовать из AmazonKinesisFirehose в AmazonKinesisFirehoseClient. - person user2411290; 06.04.2017
comment
Должен ли я преобразовать вторую часть в AmazonKinesisFirehoseClient? - person user2411290; 06.04.2017
comment
Можете ли вы проверить документацию AWS? У меня нет ноутбука пару дней, так что не могу проверить сам. Документация должна ответить на ваш вопрос. - person ketan vijayvargiya; 06.04.2017
comment
Боже мой Спасибо. @ketanvijayvargiya - person Anderson Choi; 20.12.2019