当前位置: 首页 > wzjs >正文

网站做显卡评测软件长春网站建设方案推广

网站做显卡评测软件,长春网站建设方案推广,欧美网站源码,成都网站建设新线加本系统没有集成MQ,但是又要实现削峰,刚好redis有队列的结构,可以实现简易的MQ 一、核心实现思路 生产者:使用Redis的LPUSH命令将消息插入队列头部消费者: 采用RPOP命令配合超时机制实现阻塞读取无消息时休眠指定时间…

本系统没有集成MQ,但是又要实现削峰,刚好redis有队列的结构,可以实现简易的MQ

一、核心实现思路

  1. 生产者:使用Redis的LPUSH命令将消息插入队列头部
  2. 消费者
    • 采用RPOP命令配合超时机制实现阻塞读取
    • 无消息时休眠指定时间并累加休眠时长
    • 当累计休眠时间达到max值时强制退出

二、关键代码实现

1. 添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 生产者实现
@Service
public class RedisProducer {@Autowiredprivate RedisTemplate<String, String> redisTemplate;public void sendMessage(String queueName, String message) {redisTemplate.opsForList().leftPush(queueName, message);}
}
3. 消费者实现
@Component
public class RedisConsumer implements Runnable {private static final Logger logger = LoggerFactory.getLogger(RedisConsumer.class);private final String queueName;private final int maxSleepTime; // 最大累计休眠时间(毫秒)private long accumulatedSleepTime = 0;public RedisConsumer(String queueName, int maxSleepTime) {this.queueName = queueName;this.maxSleepTime = maxSleepTime;}@Overridepublic void run() {while (true) {String message = redisTemplate.opsForList().rightPop(queueName, 1000); // 1秒超时if (message != null) {try {processMessage(message);accumulatedSleepTime = 0; // 成功消费重置计时} catch (Exception e) {logger.error("消息处理失败: {}", e.getMessage());}} else {long sleepDuration = Math.min(1000, maxSleepTime - accumulatedSleepTime);logger.info("队列为空,休眠{}ms", sleepDuration);try {Thread.sleep(sleepDuration);} catch (InterruptedException e) {Thread.currentThread().interrupt();break;}accumulatedSleepTime += sleepDuration;if (accumulatedSleepTime >= maxSleepTime) {logger.warn("累计休眠时间已达上限,强制退出");break;}}}}private void processMessage(String message) {// 模拟消息处理逻辑logger.info("处理消息: {}", message);}
}
4. 配置类
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, String> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new StringRedisSerializer());return template;}
}

三、运行与测试

  1. 启动消费者
@SpringBootApplication
public class RedisQueueDemo {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(RedisQueueDemo.class, args);RedisConsumer consumer = context.getBean(RedisConsumer.class);new Thread(consumer).start();}
}
  1. 发送测试消息
@RestController
public class TestController {@Autowiredprivate RedisProducer producer;@GetMapping("/send")public String sendMessage() {producer.sendMessage("testQueue", "Hello Redis!");return "消息已发送";}
}

四、关键特性说明

  1. 阻塞读取:通过rightPop(1000)实现非阻塞等待,避免忙等待
  2. 休眠累加:每次无消息时休眠1秒,累计时间超过max值时退出,避免cpu时间片一直被占用
  3. 异常处理:消费失败时记录日志,避免中断循环
  4. 序列化支持:可扩展为支持复杂对象的消息序列化

五、扩展建议

  1. 分布式锁:多实例部署时需添加分布式锁保证消费唯一性
  2. 消息确认:可结合Redis的WATCH命令实现消息确认机制
  3. 监控指标:添加消费速率、队列长度等监控指标

该方案综合了Redis的高性能和Spring Boot的便捷性,适用于低延迟、高可靠性的消息处理场景。实际生产环境中建议结合具体业务需求调整超时时间和休眠策略。

http://www.dtcms.com/wzjs/157930.html

相关文章:

  • 如何帮人做网站怎么自己弄一个平台
  • 怎么做局域网asp网站谷歌搜索引擎首页
  • 品牌建设方案怎么写百度搜索优化关键词排名
  • 网站建设客户会问的问题西安网站维护
  • 网易企业邮箱注册申请免费我赢网seo优化网站
  • 智慧云建筑信息平台宁波网站seo哪家好
  • wordpress远程写作关键词排名优化公司外包
  • 网站制作 手机版最新的网络营销方式
  • 做物流行业网站的开发公司成品短视频app下载有哪些软件
  • 网站建设实例pdf下载自媒体平台大全
  • 做网站的需求文档格式1688精品货源网站入口
  • 永年做网站多少钱媒体代发布
  • 网站优化怎么做效果才好怎样建网站赚钱
  • 网站建设技术经费预算百度客户管理系统登录
  • 网站开发教程 布局企业网站的推广方式和手段有哪些
  • 宁波网站建设排名网站seo视频教程
  • 宿迁网站网站建设百度搜索关键词排名查询
  • 梁平网站建设网站seo最新优化方法
  • wordpress 建站主题今天晚上19点新闻联播直播回放
  • 服装设计考研哪些大学南京百度提升优化
  • wordpress默认登陆地址久久seo正规吗
  • 公司主页网站怎么做百度手机快速排名点击软件
  • 建设银行网站介绍怎么在百度上发布广告
  • 网站制作设计多少钱湖南长沙今日疫情
  • 长安网站建设青岛seo结算
  • 网页制作基础教程第2版葛艳玲答案沈阳seo团队
  • 科技建筑公司网站seo关键词排名优化要多少钱
  • 免费的行情软件网站在线使用windows优化大师提供的
  • java软件开发就业前景西安网站关键词优化推荐
  • 怎么用织梦做购物网站奶茶软文案例300字