消息队列,消费者可以同时处理多条消息吗?

0

RabbmitMQ队列里都是耗时任务:请求第三方的API(http)。


当开启一个消费worker时,能否在产生IO时继续处理下一条消息。


场景:同步第三方平台的产品数据,比如发起同步某个账号的产品,一个账号下面的产品可以最少也有几千条,多达十几万的也有。


注:考虑第三方API是没有批量查询接口的。


将产品ID放在队列里,开启worker消费,消费者可以在遇到IO等待时继续处理下一条消费吗,需要对每条消息ACK(主要是当请求失败可以重试)。


如果不能实现,我就打算放到REDIS list里,用wokerman的定时器读取redis来发送异步http请求,如果失败就重新加到list里。


另外在这样IO耗时的场景下,开启进程数量怎么计算会合适些?

已邀请:

six

赞同来自:

用workerman/http-client 可以异步请求,是非阻塞IO。用curl是阻塞IO,无法切换到处理下一个消息。


关于进程数的话,如果是用url阻塞方式,估算下消费一个消息需要耗时多长时间。估算下产生消息的频率。进程数因该设置多少就出来了。比如一个消息耗时10秒,整个系统大概每秒产生10条消息。那么进程数就是100就可以刚好能够处理。


如果是workerman/http-client方式处理,感觉配置成cpu的1-2倍就差不多了吧。

要回复问题请先登录注册