今天遇到一个 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 插入数据。这里就不提供了。
相关推荐
资源来自pypi官网。 资源全名:redis-queue-tool-4.1.5.tar.gz
添加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 ) ;...
如何使用Flask,Redis Queue和Docker处理后台进程的示例 快速开始 旋转容器: $ docker-compose up -d --build 将浏览器打开到来查看应用程序,或者打开来查看RQ仪表板。 是否想学习如何构建? 查看。
资源分类:Python库 所属语言:Python 资源全名:redis-queue-tool-4.3.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Go 发行版和 (Redis 的 Go 客户端)是唯一的依赖项。 样品 单队列客户端 package main import "flag" import "fmt" import "log" import "github.com/skidder/redis-queue/rq" var ( redisServer = flag . String...
资源分类:Python库 所属语言:Python 资源全名:redis_queue_tool-4.0.7-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
节点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之间) 队列会自动进行重复数据删除(重复的项目在推送...
php redis 消息队列,测试可用,包括消费端和生产端demo,说明文档。
redis的安装和基本常识redis的安装和基本常识redis的安装和基本常识redis的安装和基本常识redis的安装和基本常识redis的安装和基本常识redis的安装和基本常识redis的安装和基本常识redis的安装和基本常识redis的安装...
Redis主从复制和集群配置说明
http://127.0.0.1:8000/getList queueName">一个NodeJS和redis做的基于http协议使用的队列 做了点小修改 支持多个队列和post提交 原github地址:https://github.com/lnmp/nodemq 使用方法: 在安装好redis和nodejs...
结合Linux部署Redis服务,本地代码结合Spring管理进行单元测试Demo;