如果从一个系统向另一个系统推送2000条数据,springboot中使用rabbitmq技术实现

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌
博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦
🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用微信支付,扫码加群。由于维护成本问题得不到解决,可能将停止线上维护。
🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
Java项目案例《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》https://blog.csdn.net/qq_57756904/category_12173599.html
有需求代码永远写不完,而方法才是破解之道,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。
最后再送一句:最好是学会了,而不是学废了!!
2
在 Spring Boot 中使用 RabbitMQ 批量推送 2000 条数据到另一个系统,可以通过以下步骤实现。这里会提供完整的技术方案和代码示例。
1. 技术方案设计
| 组件 | 说明 |
|---|---|
| 生产者 | Spring Boot 服务,负责生成 2000 条数据并批量发送到 RabbitMQ 队列。 |
| 消费者 | 另一个 Spring Boot 服务,监听队列并处理数据。 |
| RabbitMQ | 消息中间件,负责可靠地传递数据。 |
| 批量发送 | 使用 RabbitTemplate 循环发送,或通过 BatchingRabbitTemplate 优化。 |
| 数据格式 | JSON 序列化(推荐)或 Java 对象序列化。 |
2. 实现步骤
2.1 添加依赖
在 pom.xml 中引入 RabbitMQ 和 JSON 支持:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
运行 HTML
2.2 配置 RabbitMQ
在 application.yml 中配置连接:
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
template:
exchange: data.exchange
routing-key: data.routingkey
2.3 定义数据模型
public class DataMessage {
private Long id;
private String content;
// Getters and Setters
}
2.4 生产者服务
发送 2000 条数据到队列:
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DataProducer {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendBatchData() {
for (int i = 1; i <= 2000; i++) {
DataMessage message = new DataMessage();
message.setId((long) i);
message.setContent("Data-" + i);
// 发送到 RabbitMQ(JSON 序列化)
rabbitTemplate.convertAndSend(
"data.exchange",
"data.routingkey",
message
);
}
System.out.println("2000 条数据已发送!");
}
}
2.5 消费者服务
监听队列并处理数据:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Service
public class DataConsumer {
@RabbitListener(queues = "data.queue")
public void receiveMessage(DataMessage message) {
System.out.println("收到数据: " + message.getId() + ", " + message.getContent());
// 在这里处理业务逻辑(如存储到数据库)
}
}
2.6 配置交换机和队列
在生产者或消费者中声明队列和交换机(也可通过 RabbitMQ 管理界面提前创建):
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
@Bean
public TopicExchange dataExchange() {
return new TopicExchange("data.exchange");
}
@Bean
public Queue dataQueue() {
return new Queue("data.queue");
}
@Bean
public Binding binding() {
return BindingBuilder
.bind(dataQueue())
.to(dataExchange())
.with("data.routingkey");
}
}
2.7 触发生产者
在 Controller 中调用生产者:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DataController {
@Autowired
private DataProducer dataProducer;
@GetMapping("/send-data")
public String sendData() {
dataProducer.sendBatchData();
return "数据推送已启动!";
}
}
3. 优化建议
3.1 批量发送(Batching)
使用 BatchingRabbitTemplate 提高吞吐量(需配置批量大小和超时时间):
@Bean
public BatchingRabbitTemplate batchTemplate(ConnectionFactory connectionFactory) {
BatchingStrategy strategy = new SimpleBatchingStrategy(100, 1024 * 1024, 1000);
return new BatchingRabbitTemplate(strategy, connectionFactory);
}
3.2 异步确认
启用生产者确认模式(publisher-confirms),确保消息可靠投递:
spring:
rabbitmq:
publisher-confirms: true
publisher-returns: true
3.3 消费者并发
提高消费者并发处理能力:
spring:
rabbitmq:
listener:
simple:
concurrency: 10 # 并发消费者数量
max-concurrency: 20
3.4 死信队列
配置死信队列处理失败消息(参考前文死信队列部分)。
4. 测试流程
-
启动 RabbitMQ 服务。
-
启动生产者服务,访问
http://localhost:8080/send-data触发发送。 -
启动消费者服务,观察控制台输出。
5. 关键注意事项
-
幂等性:消费者需处理重复消息(如通过唯一 ID 去重)。
-
错误处理:捕获消费者异常,避免消息丢失。
-
性能监控:通过 RabbitMQ 管理界面监控队列积压情况。
通过以上步骤,可以高效可靠地实现 Spring Boot + RabbitMQ 的批量数据推送。
3
更多推荐
所有评论(0)