0

J'essaye d'écrire des données d'une API (google stocks/finance API) dans mon flux AWS Firehose. J'ai déjà téléchargé et installé le plugin AWS sur Eclipse, configuré mon flux Firehose sur AWS, et tout semble être configuré correctement. Je rencontre des problèmes, cependant. La ligne suivante semble être obsolète ... J'ai essayé différentes variantes du SDK d'Amazon, mais je n'arrive pas à obtenir le bon code.Obtention d'erreurs dans le programme Java pour écrire dans le flux Kinesis Firehose

AmazonKinesisFirehoseClient firehoseClient = new AmazonKinesisFirehoseClient(credentials);

Ensuite, je reçois quelques erreurs avec ce qui suit. L'erreur spécifique est "La méthode setRecord (Record) n'est pas définie pour le type PutRecordRequest," même si je l'ai pris directement à partir de la référence API d'Amazon.

request.setRecord(record);

firehoseClient.putRecord(request);

obtenir également une erreur sur la deuxième ligne au-dessus: « La méthode putRecord (com.amazonaws.services.kinesisfirehose.model.PutRecordRequest) dans le AmazonKinesisFirehoseClient de type ne sont pas applicables pour les arguments (com.amazonaws. services.kinesis.model.PutRecordRequest) »

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(); 
      } 
     } 

    } 




    } 

Répondre

1

Le problème est que vous avez inclus des cours de Kinesis, pas package Kinesis Firehose, Java. Pour exemple, vous avez utilisé:

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

Alors, vous devriez avoir utilisé:

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

Kinesis, Kinesis Firehose et Kinesis Analytics sont différents services, même si elles tombent sous un parapluie de diffusion en continu services sur AWS. Par conséquent, ils ont différents espaces de noms de package dans Java SDK. Si vous démarrez à partir de la documentation officielle here, vous obtiendrez la référence Java SDK correcte here.

EDIT: Pour répondre à votre autre question: oui, ce qui suit est dépréciée:

AmazonKinesisFirehoseClient firehoseClient = new AmazonKinesisFirehoseClient(credentials); 

Vous devez plutôt utiliser les éléments suivants:

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

Référez-vous à la documentation officielle here sur la façon dont pour initialiser correctement AmazonKinesisFirehoseClient.

+0

Merci ... C'était très utile !! Une dernière question, savez-vous quelle est la manière correcte, non dépréciée, d'écrire cette ligne? AmazonKinesisFirehoseClient firehoseClient = new AmazonKinesisFirehoseClient (informations d'identification); – user2411290

+0

Mise à jour de la réponse. N'oubliez pas * d'accepter * la réponse si cela vous a aidé! –

+0

Merci pour la réponse ... Lorsque j'ajoute le code que vous m'a donné exactement (sauf que je change les informations d'identification), j'obtiens l'erreur suivante: "Type de discordance: impossible de convertir AmazonKinesisFirehose en AmazonKinesisFirehoseClient" – user2411290