Java 实现 RabbitMQ 队列数据每 5 分钟保存到 Redis
要实现将 RabbitMQ 队列中的过车数据按照过车时间每 5 分钟保存到 Redis,可以使用 Java 编写一个程序来实现。下面是一个简单的示例代码:
import com.rabbitmq.client.*;
import redis.clients.jedis.Jedis;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class RabbitMQToRedis {
private static final String QUEUE_NAME = "car_queue";
private static final String REDIS_KEY_PREFIX = "car_data:";
private static final int SAVE_INTERVAL = 5; // 保存间隔,单位为分钟
public static void main(String[] args) throws Exception {
// 连接 RabbitMQ
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 连接 Redis
Jedis jedis = new Jedis("localhost");
// 监听 RabbitMQ 队列
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, StandardCharsets.UTF_8);
// 获取当前时间
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String currentTime = now.format(formatter);
// 保存到 Redis
String redisKey = REDIS_KEY_PREFIX + currentTime;
jedis.set(redisKey, message);
// 每 5 分钟保存一次
if (now.getMinute() % SAVE_INTERVAL == 0) {
jedis.save();
}
}
};
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
上述代码示例中,假设 RabbitMQ 队列名称为"car_queue",连接本地 Redis 数据库,每 5 分钟保存一次到 Redis 中。
请根据实际情况修改代码中的 RabbitMQ 和 Redis 连接信息以及相关参数。
原文地址: https://www.cveoy.top/t/topic/p8Kp 著作权归作者所有。请勿转载和采集!