Comments (12)
from notes.
from notes.
from notes.
from notes.
你可以尝试一下当订单生成之后主动向队列推送一条消息, 然后由队列的消费者去处理这个订单
而不是定时去扫描现有的所有订单
from notes.
我现在的做法貌似就是这样,我是订单任务都推到队列中,然后在消费者方法中取任务进行判断,没有达到某个点就用release(1)隔一秒继续执行,达到了就去平仓,删除任务,但是这样我看了一下,每秒就只能处理15个订单,而且我换成release(),每秒处理的也就是15单
from notes.
你可以把需求拆分成两个部分:
第一部分负责从找出达到平仓条件的订单, 并将达到平仓条件的订单推送到队列中
第二个部分负责处理达到平仓条件的订单
第一部分可以不用队列来做, 而是用常驻脚本来做,
该常驻脚本的伪代码如下:
while(true){
// 从数据库或缓存中按照时间或者其他维度取出一定数量的订单
$ordersToCheck = $this->queryOrders();
// 从这些订单中过滤出达到平仓条件的订单
$orders = $this->filterSuitableOrders($ordersToCheck) ;
foreach($orders as $order){
// 将达到平仓条件的订单推送到 'close-position' 队列中, 由消费进程去进行平仓操作
Queue::push($order, 'close-position');
}
}
第二部分负责消费 'close-position' 队列中的订单
你可以找一下每秒处理15单的瓶颈在哪里,
-
如果瓶颈在过滤出达到平仓条件的订单的话, 就优化第一部分的逻辑, 核心思路是并行过滤
比如:
每次将订单存储到缓存或者数据库时, 根据订单的某个特征,如 订单号的 前3位数字, 将订单存储到不同的缓存 list 里面 或者 不同的表里面
然后, 针对每个 缓存 list , 或者针对每个表, 分别启动一个或多个常驻脚本, 这个常驻脚本负责从它对应的 缓存 list 或者 表里面进行扫描和过滤 -
如果瓶颈在处理达到平仓条件的订单的话, 就增加 'close-position' 队列的消费进程数量
from notes.
from notes.
你好,我想请教一下,开启多个消费进程,任务不会重复消费的原理是什么?是因为redis的原子性么。
from notes.
你好,我想请教一下,开启多个消费进程,任务不会重复消费的原理是什么?是因为redis的原子性么。
获取一个待消费的任务的本质是调用 redis 的 pop()
方法得到一个 job payload
由于 redis 服务是单进程的, 所以即使多个消费进程同时调用 pop()
方法, 也不会得到重复的 job payload
from notes.
from notes.
你好我想请问一下。我创建multiTask的时候,taskA跟taskB都进入队列了,然后运行php think queue:work --queue multiTaskJobQueue的时候,第一次消费了TaskA,第二次消费了TaskB。但是命令行中并无输出。只有Processed: application\index\job\MultiTask@taskB这种提示,请问是什么原因?
from notes.
Related Issues (20)
- TP5.1 队列配置文件的不同
- later方法并没有返回值 HOT 1
- 我在执行服务器消耗的时候队列是执行了。但是没有输出。 HOT 2
- Cannot redeclare class
- 我这个为什么执行了队列但是没有打印信息 HOT 1
- thinkphp 队列这个文章中图片不见了? HOT 1
- 关于消息队列的可视化管理工具
- 任务的开始执行的时刻 + expire > 当前时刻 HOT 1
- thinkphp-queue HOT 2
- 多个消费者并行执行 同个任务 怎么设置
- 循环执行 Queue::later 时,若出现个别失败, 会丢失队列数据 如何解决?
- --queue:listen bug
- README.md 说明文件图片不显示
- 队列抛出的异常类,如何接收
- 接收端在接收到消息之后,去执行静态的模型去查询数据报错。
- 队列创建成功,消费消息时,报错 Exception redis + 乱码
- 你好 我 php think queue:work --queue helloJobQueue 执行没有结果只提示Processed: app\api\Jobcl\Jobc 处理这个问题 我在看数据库和 think log 执行结果的记录不知道在哪里出现
- 如果执行的Job类不存在,则会无限执行,无法捕获异常 HOT 1
- php think queue:work --queue helloJobQueue 执行后没有输出
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from notes.