You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手友好指南:如何通过Spring Boot应用结合React向Amazon Kinesis写入数据

嘿,作为Kinesis和AWS的新手,完全不用慌!我给你整理了两个场景的详细步骤,都是新手友好的,一步步跟着来就行~

仅用Spring Boot向Amazon Kinesis写入数据

咱们先从纯后端的场景入手,搞定这个之后再结合React就简单多了。

1. 前期准备

  • 拥有一个AWS账号,登录AWS控制台创建一个Kinesis数据流(记住数据流的名称,后面要用到)
  • 配置AWS凭证:推荐在本地~/.aws/credentials文件里添加你的Access Key和Secret Key,格式如下:
    [default]
    aws_access_key_id=你的Access Key
    aws_secret_access_key=你的Secret Key
    
    或者也可以用环境变量,不过本地开发用credentials文件更方便。

2. 添加Spring Boot依赖

在你的pom.xml里加入Kinesis相关依赖,这里推荐用Spring Cloud AWS的封装,简化开发:

<dependencies>
    <!-- Spring Boot Web 依赖(可选,如果你需要测试接口的话) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Spring Cloud AWS Kinesis 依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-aws-messaging</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>
</dependencies>

3. 配置Spring Boot

在application.properties里添加AWS和Kinesis的配置:

# AWS 区域(比如us-east-1,根据你创建数据流的区域来)
cloud.aws.region.static=us-east-1
# 禁用AWS实例元数据(本地开发不需要)
cloud.aws.stack.auto=false

# Kinesis 数据流名称
kinesis.stream.name=your-stream-name

4. 编写Kinesis生产者服务

创建一个服务类,用来封装发送数据到Kinesis的逻辑:

import org.springframework.cloud.aws.messaging.core.KinesisTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class KinesisProducerService {

    private final KinesisTemplate kinesisTemplate;
    private final String streamName;

    // 从配置文件注入数据流名称
    public KinesisProducerService(KinesisTemplate kinesisTemplate, 
                                 @Value("${kinesis.stream.name}") String streamName) {
        this.kinesisTemplate = kinesisTemplate;
        this.streamName = streamName;
    }

    // 发送数据的方法,支持字符串或序列化后的对象
    public void sendData(String data) {
        // 如果是发送Java对象,可以先转成JSON(用Jackson等工具)
        kinesisTemplate.send(streamName, data);
        System.out.println("✅ 数据已发送到Kinesis: " + data);
    }
}

5. 测试发送数据

写一个测试类或者用CommandLineRunner来验证:

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class KinesisTestRunner implements CommandLineRunner {

    private final KinesisProducerService producerService;

    public KinesisTestRunner(KinesisProducerService producerService) {
        this.producerService = producerService;
    }

    @Override
    public void run(String... args) throws Exception {
        // 发送测试数据
        producerService.sendData("Hello Kinesis! 这是来自Spring Boot的测试数据~");
    }
}

启动Spring Boot应用,控制台会打印成功信息,然后你可以去AWS Kinesis控制台查看数据流里的记录,确认数据已经写入。


Spring Boot + React 向Amazon Kinesis写入数据

这个场景是前端收集用户数据,传给后端,再由后端写入Kinesis。咱们基于上面的后端代码来扩展:

1. 完善后端接口

在Spring Boot里添加一个REST接口,接收前端传来的数据:

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin(origins = "http://localhost:3000") // 允许React前端的跨域请求
public class KinesisDataController {

    private final KinesisProducerService producerService;

    public KinesisDataController(KinesisProducerService producerService) {
        this.producerService = producerService;
    }

    @PostMapping("/api/send-to-kinesis")
    public ResponseEntity<String> receiveAndSendData(@RequestBody String data) {
        producerService.sendData(data);
        return ResponseEntity.ok("✅ 数据已提交,正在发送到Kinesis");
    }
}

这里的@CrossOrigin是为了解决React和Spring Boot跨域的问题,如果你部署的时候前后端同域,可以去掉这个注解。

2. 编写React前端组件

创建一个简单的React组件,用来收集用户输入并发送到后端:
首先确保你的React项目里安装了axios:

npm install axios

然后编写组件:

import React, { useState } from 'react';
import axios from 'axios';

function KinesisDataSender() {
    const [inputContent, setInputContent] = useState('');
    const [message, setMessage] = useState('');

    const handleSubmit = async (e) => {
        e.preventDefault();
        if (!inputContent.trim()) {
            setMessage('❌ 请输入要发送的数据');
            return;
        }
        try {
            const response = await axios.post(
                'http://localhost:8080/api/send-to-kinesis',
                inputContent,
                { headers: { 'Content-Type': 'application/json' } }
            );
            setMessage(response.data);
            setInputContent('');
        } catch (error) {
            setMessage('❌ 发送失败,请检查后端是否启动');
            console.error(error);
        }
    };

    return (
        <div style={{ padding: '20px', maxWidth: '500px', margin: '0 auto' }}>
            <h2>向Kinesis发送数据</h2>
            <form onSubmit={handleSubmit}>
                <textarea
                    value={inputContent}
                    onChange={(e) => setInputContent(e.target.value)}
                    placeholder="输入要发送的数据..."
                    rows="5"
                    style={{ width: '100%', marginBottom: '10px' }}
                />
                <button type="submit" style={{ padding: '8px 16px' }}>发送数据</button>
            </form>
            {message && <p style={{ marginTop: '15px', color: message.includes('✅') ? 'green' : 'red' }}>{message}</p>}
        </div>
    );
}

export default KinesisDataSender;

3. 测试整个流程

  1. 启动Spring Boot后端应用
  2. 启动React前端应用(npm start)
  3. 在前端输入数据,点击发送按钮,查看提示信息
  4. 去AWS Kinesis控制台验证数据是否成功写入

新手注意事项

  • 🔒 绝对不要在代码里硬编码AWS密钥!本地开发用~/.aws/credentials,生产环境用IAM角色或者AWS Secrets Manager。
  • 如果你的Kinesis数据流在其他区域,记得修改application.properties里的区域配置。
  • 如果遇到发送失败的情况,可以检查AWS凭证是否正确,数据流是否存在,网络是否正常。
  • 对于复杂的Java对象,可以用Jackson库序列化后再发送,后端接收的时候也可以反序列化。

内容的提问来源于stack exchange,提问作者Shlok Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:48:16