简体   繁体   English

在Java程序中获取错误以写入Kinesis Firehose流

[英]Getting errors in java program to write to Kinesis Firehose stream

I'm trying to just write some data from an API (google stocks/finance API) to my AWS Firehose stream. 我试图将一些数据从API(Google股票/财务API)写入我的AWS Firehose流。 I already downloaded and installed the AWS plugin on Eclipse, setup my Firehose stream on AWS, and everything seems to be setup correctly. 我已经在Eclipse上下载并安装了AWS插件,在AWS上设置了Firehose流,并且一切似乎都已正确设置。 Am encountering some problems, though. 不过,我遇到了一些问题。 The following line seems to be deprecated...I tried different variations from Amazon's SDK, but I can't seem to get the correct code. 以下行似乎已被弃用...我尝试了与Amazon SDK不同的变体,但似乎无法获得正确的代码。

AmazonKinesisFirehoseClient firehoseClient = new AmazonKinesisFirehoseClient(credentials); AmazonKinesisFirehoseClient firehoseClient =新的AmazonKinesisFirehoseClient(凭证);

Next, I'm getting some errors with the following. 接下来,我在以下方面遇到一些错误。 The specific error is, " The method setRecord(Record) is undefined for the type PutRecordRequest," even though I took it directly from Amazon's API reference. 尽管我直接从Amazon的API参考中获取了该错误,但特定的错误是“ 对于类型PutRecordRequest,未定义setRecord(Record)方法”

request.setRecord(record); request.setRecord(record);

firehoseClient.putRecord(request); firehoseClient.putRecord(request);

Also getting an error on the second line above: "The method putRecord(com.amazonaws.services.kinesisfirehose.model.PutRecordRequest) in the type AmazonKinesisFirehoseClient is not applicable for the arguments (com.amazonaws.services.kinesis.model.PutRecordRequest)" 在上面的第二行上也出现错误: “ AmazonKinesisFirehoseClient类型的方法putRecord(com.amazonaws.services.kinesisfirehose.model.PutRecordRequest)不适用于参数(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();
            }
        }   

    }




    }

The problem is that you've included some classes from Kinesis, not Kinesis Firehose, Java package. 问题是您包含了Kinesis的某些类, 而不是 Kinesis Firehose Java包。 For eg, you've used: 例如,您使用了:

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

Whereas, you should've used: 而您应该使用:

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

Kinesis, Kinesis Firehose and Kinesis Analytics are different services, even though they fall under one umbrella of streaming services on AWS. Kinesis,Kinesis Firehose和Kinesis Analytics是不同的服务,即使它们属于AWS上的流服务的总括。 Consequently, they have different package namespaces in the Java SDK. 因此,它们在Java SDK中具有不同的包名称空间。 If you start from the official documentation here , you'll reach the correct Java SDK reference here . 如果从此处的官方文档开始 ,您将在此处找到正确的Java SDK参考。

EDIT : To answer your other question: yes, the following is deprecated: 编辑 :要回答您的另一个问题:是的,不推荐使用以下内容:

AmazonKinesisFirehoseClient firehoseClient = new AmazonKinesisFirehoseClient(credentials);

You should instead use the following: 您应该改为使用以下内容:

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

Refer to the official documentation here on how to correctly initialize AmazonKinesisFirehoseClient. 有关如何正确初始化AmazonKinesisFirehoseClient的信息,请参阅此处的官方文档。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM