今天遇到一个 ThreadPoolExecutor 队列 问题。
需求如下:
1:处于成本和人员技术水平限制,不可能采用高大上的系统。
2:项目周期短。
3:队列必须顺序取出,同时过滤掉超时数据。
4:多个系统。
实现原理:
1:public class CameraRequestQueue implements BlockingQueue<Runnable> ;
继承BlockingQueue<Runnable> ;
2:public class RedisCameraRequestQueue extends CameraRequestQueue
继承CameraRequestQueue ;
3:实现 如下方法:
@Override
public int size() {
return Redis List Queue Size ;
}
@Override
public boolean isEmpty() {
return Redis List Queue isEmpty();
}
// 获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)。
@Override
public ExRunnable take() throws InterruptedException {
CameraRequestBean msg = Redis List Queue .take();
if (msg == null) {
return null;
} else {
ExRunnable iExRunnable = new ExRunnable(msg, cameraRequestHandFactory);
iExRunnable.setPublicMediaService(publicMediaService);
return iExRunnable;
}
}
@Override
public int remainingCapacity() {
return Integer.MAX_VALUE;
}
3:线程池:
ThreadPoolExecutor executor = new ThreadPoolExecutor(initCount, MAX_SIZE, 5, TimeUnit.MILLISECONDS,redisCameraRequestQueue, new CameraRequestHandThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
4:初始化:
executor.prestartAllCoreThreads();
5:public class ExRunnable implements Runnable 。
//具体实现处理数据的方法实现。
这时:当有其他系统有数据插入到对应的redis list queue 时,本方法,可以自动从redis list queue 中取出数据。
1:优点:方便,代码简介,一般的开发人员都能实现。
2:不足:
1:此方法暂时不能保证重要性数据的正确执行。
2:在关闭线程池的时候,可能会掉数据。
3:本方法还没在redis lits queue 集群里面测试过。(因没有多余的服务器来搭建系统)。
4:ThreadPoolExecutor 本身有线程不停的从 redis list queue 取出数据,可能会有一些性能损耗。
本人:使用场景:
1:2000多个摄像头排队调用,如果调用方调用失败可以重新排队调用。
2:发送UDP数据。
以下是关键代码。redis 插入数据。这里就不提供了。
相关推荐
总的来说,Redis Queue Tool 4.1.5是一个强大且易用的Python库,它为开发人员提供了一种高效的方式来管理任务队列,特别是在需要高并发处理和任务持久化的场景下,RQT的表现尤为出色。无论是小型项目还是大型分布式...
Go 发行版和 (Redis 的 Go 客户端)是唯一的依赖项。 样品 单队列客户端 package main import "flag" import "fmt" import "log" import "github.com/skidder/redis-queue/rq" var ( redisServer = flag . String...
添加Redis :: Queue类,该类可用作基于Redis的Distributed-Queue。 Redis通常用作消息传递服务器,以实现对后台作业或其他类型的消息传递任务的处理。 它实现了此处描述的可靠队列模式: ://redis.io/commands/...
支持 Redis >= 5.0.0 和 (Node.js >= 8)。快速开始安装$ npm install redis-queue-stream基本用法 const redisQueue = require ( 'redis-queue-stream' ) ;const RedisQ = new redisQueue ( config , option ) ;...
资源分类:Python库 所属语言:Python 资源全名:redis-queue-tool-4.3.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
如何使用Flask,Redis Queue和Docker处理后台进程的示例 快速开始 旋转容器: $ docker-compose up -d --build 将浏览器打开到来查看应用程序,或者打开来查看RQ仪表板。 是否想学习如何构建? 查看。
总的来说,这个Go延迟队列项目结合了Go语言的并发优势和Redis的数据结构特性,提供了一种灵活、可扩展的解决方案,适用于各种需要延迟处理任务的场景。对于希望深入理解延迟队列或者在自己的项目中应用延迟队列的...
资源分类:Python库 所属语言:Python 资源全名:redis_queue_tool-4.0.7-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
在本项目 "redisQueue.rar" 中,我们关注的是如何利用 PHP 进行 Redis 消息队列的实现,这涉及到 PHP 的 Redis 扩展以及消息队列的基本概念和工作原理。 首先,让我们了解一下什么是消息队列。消息队列是一种异步...
节点redis-queue概述这是一个非常简单的 Redis 队列包装器,用于不同进程之间的通信。 它带有两个 API: Channel——推送/弹出界面该过程创建了 Channel 的一个实例。 发送进程使用 Channel 实例通过push函数将数据...
任务队列 环境准备 Python Redis # pip install -i http://pypi.douban.com/simple redis RQ ...Redis Server # docker pull redis:latest # docker run -d -p 6379:6379 -t redis:...from rq import Queue from rq.j
资源分类:Python库 所属语言:Python 资源全名:redis_queue_tool-4.3.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
重新排队 redisqueue提供使用的队列的生产者和消费者。特征Producer结构使入队消息变得容易。 Consumer结构可以并发处理消息。 如果没有错误,则声明并确认消息,这样,如果消费者在处理过程中死亡,则不会丢失正在...
Redis优先级队列 redis-priority-queue是一个简单的工作队列,类似于具有以下新增功能: 可以添加具有优先级的项目(介于-9007199254740992和9007199254740992之间) 队列会自动进行重复数据删除(重复的项目在推送...
标题“node-js-redis-queue”表明我们正在讨论一个基于Node.js和Redis的队列系统。这个系统可能用于处理后台任务、批量操作或者实现异步处理。Node.js是JavaScript的一个运行环境,它允许开发者在服务器端使用...
总的来说,Redis和RedisDesktop的结合使用,为开发者提供了高效、便捷的数据存储和管理解决方案。无论是用于缓存、消息队列还是其他用途,Redis的高性能和丰富功能,加上RedisDesktop的直观操作,都是IT行业中不可或...
5. **异常处理**:考虑到网络问题和Redis服务可能出现的异常,需要在代码中添加适当的错误处理和重试机制,确保消息的可靠传输。 6. **性能优化**:根据应用需求,可能需要考虑消息批量处理、预取策略以及超时设定...
总结起来,PHP队列结合PHP-Redis扩展,提供了一种高效、灵活的后台任务处理方式,适用于各种高并发和异步需求。了解并掌握这一技术,对于提升PHP应用程序的稳定性和效率具有重要意义。在实际项目中,可以根据具体...