新手友好指南:如何通过Spring Boot应用结合React向Amazon Kinesis写入数据
嘿,作为Kinesis和AWS的新手,完全不用慌!我给你整理了两个场景的详细步骤,都是新手友好的,一步步跟着来就行~
仅用Spring Boot向Amazon Kinesis写入数据
咱们先从纯后端的场景入手,搞定这个之后再结合React就简单多了。
1. 前期准备
- 拥有一个AWS账号,登录AWS控制台创建一个Kinesis数据流(记住数据流的名称,后面要用到)
- 配置AWS凭证:推荐在本地
~/.aws/credentials文件里添加你的Access Key和Secret Key,格式如下:
或者也可以用环境变量,不过本地开发用credentials文件更方便。[default] aws_access_key_id=你的Access Key aws_secret_access_key=你的Secret Key
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. 测试整个流程
- 启动Spring Boot后端应用
- 启动React前端应用(
npm start) - 在前端输入数据,点击发送按钮,查看提示信息
- 去AWS Kinesis控制台验证数据是否成功写入
新手注意事项
- 🔒 绝对不要在代码里硬编码AWS密钥!本地开发用
~/.aws/credentials,生产环境用IAM角色或者AWS Secrets Manager。 - 如果你的Kinesis数据流在其他区域,记得修改
application.properties里的区域配置。 - 如果遇到发送失败的情况,可以检查AWS凭证是否正确,数据流是否存在,网络是否正常。
- 对于复杂的Java对象,可以用Jackson库序列化后再发送,后端接收的时候也可以反序列化。
内容的提问来源于stack exchange,提问作者Shlok Sharma
相关产品推荐
相关产品推荐

