簡體   English   中英

如何將 Spring 啟動應用程序的數據輸入 Amazon Kinesis?

[英]How to enter data from Spring Boot Application into Amazon Kinesis?

我想使用 Sprint Boot Application 和 React 將數據添加到 kinesis 中。 在涉及 Kinesis、AWS 等方面,我是一個完全的初學者,因此需要一個適合初學者的指南。

要將數據記錄添加到Spring啟動應用程序中的Amazon Kinesis數據stream中,您可以使用AWS SDK用於8837439595953288 V2,尤其是Amazon Kinesis 88374395959595888888888888888888888888888888888888888888號888888888.388888888888888888.

因為您是初學者,我建議您閱讀 AWS SDK Java V2 開發人員指南,以熟悉如何使用此 Java API。請參閱開發人員指南 - AWS SDK for Java 2 .

下面是一個代碼示例,向您展示如何使用此服務客戶端添加數據記錄。 請參閱 Github, 這里有其他所需的課程。

package com.example.kinesis;

//snippet-start:[kinesis.java2.putrecord.import]
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.core.SdkBytes;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.kinesis.KinesisClient;
import software.amazon.awssdk.services.kinesis.model.PutRecordRequest;
import software.amazon.awssdk.services.kinesis.model.KinesisException;
import software.amazon.awssdk.services.kinesis.model.DescribeStreamRequest;
import software.amazon.awssdk.services.kinesis.model.DescribeStreamResponse;
//snippet-end:[kinesis.java2.putrecord.import]

/**
 * Before running this Java V2 code example, set up your development environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class StockTradesWriter {

    public static void main(String[] args) {

       final String usage = "\n" +
                "Usage:\n" +
                "    <streamName>\n\n" +
                "Where:\n" +
                "    streamName - The Amazon Kinesis data stream to which records are written (for example, StockTradeStream)\n\n";

            if (args.length != 1) {
                System.out.println(usage);
                System.exit(1);
            }

            String streamName = args[0];
            Region region = Region.US_EAST_1;
            KinesisClient kinesisClient = KinesisClient.builder()
                .region(region)
                .credentialsProvider(ProfileCredentialsProvider.create())
                .build();

            // Ensure that the Kinesis Stream is valid.
            validateStream(kinesisClient, streamName);
            setStockData( kinesisClient, streamName);
            kinesisClient.close();
    }

        // snippet-start:[kinesis.java2.putrecord.main]
        public static void setStockData( KinesisClient kinesisClient, String streamName) {

            try {
            // Repeatedly send stock trades with a 100 milliseconds wait in between
            StockTradeGenerator stockTradeGenerator = new StockTradeGenerator();

            // Put in 50 Records for this example
            int index = 50;
            for (int x=0; x<index; x++){
                StockTrade trade = stockTradeGenerator.getRandomTrade();
                sendStockTrade(trade, kinesisClient, streamName);
                Thread.sleep(100);
             }

        } catch (KinesisException | InterruptedException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
        System.out.println("Done");
    }

    private static void sendStockTrade(StockTrade trade, KinesisClient kinesisClient,
                                       String streamName) {
        byte[] bytes = trade.toJsonAsBytes();
        // The bytes could be null if there is an issue with the JSON serialization by the Jackson JSON library.
        if (bytes == null) {
            System.out.println("Could not get JSON bytes for stock trade");
            return;
        }

        System.out.println("Putting trade: " + trade);
        PutRecordRequest request = PutRecordRequest.builder()
                .partitionKey(trade.getTickerSymbol()) // We use the ticker symbol as the partition key, explained in the Supplemental Information section below.
                .streamName(streamName)
                .data(SdkBytes.fromByteArray(bytes))
                .build();
        try {
            kinesisClient.putRecord(request);
        } catch (KinesisException e) {
            e.getMessage();
        }
    }

    private static void validateStream(KinesisClient kinesisClient, String streamName) {
        try {
            DescribeStreamRequest describeStreamRequest = DescribeStreamRequest.builder()
                    .streamName(streamName)
                    .build();

            DescribeStreamResponse describeStreamResponse = kinesisClient.describeStream(describeStreamRequest);

            if(!describeStreamResponse.streamDescription().streamStatus().toString().equals("ACTIVE")) {
                System.err.println("Stream " + streamName + " is not active. Please wait a few moments and try again.");
                System.exit(1);
            }
        }catch (KinesisException e) {
            System.err.println("Error found while describing the stream " + streamName);
            System.err.println(e);
            System.exit(1);
        }
    }
    // snippet-end:[kinesis.java2.putrecord.main]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM