关于redis的消息队列问题请教

今天看了下redis的消息队列,大概理解为,将用户提交的请求,加入队列,然后就终止连接。另外一个进程或者线程,则一直在不停的从队列中取出数据进行处理。

这里有个问题,另外的那个进程或者线程,在jfinal中,是需要自己在启动jfinal时创建一个线程去搞这个事情吗?

评论区

flyinkeke

2019-11-29 13:09

可以用定时任务做,比如每隔一秒去队列中拿数据,去执行相应的动作

JFinal

2019-11-29 14:11

消息队列,有生产者、消费者两个角色,生产者负责往队列里放东西,消费都负责从队列中取东西来消费

生产者、消费者都可以同时有多个并存,所以要处理好并发

如果并发不高的话,可以是多个生产者,一个消费者。

消费者可以采用定时查询的方式处理,例如使用 Cron4jPlugin 定时任务。 也可以使用被动通知的方式,例如使用 redis redis订阅和发布功能来实现

flash866

2019-12-01 22:16

@flyinkeke @JFinal 多谢2位回复,如果是采用cron4j,那么这个定时任务是每隔一段时间去检测队列中有多少个东西吗?如果有N个,则派发N个子线程去处理? 还有另外一个问题,cron4j的检测执行时阻塞式的吗?即,当我上一个任务还没执行完毕,下一个检测时间已经到了,那么此时cron4j是等待上一次执行完成后再开始工作,还是会另外发起一个线程来操作呢?

flyinkeke

2019-12-02 14:03

@flash866 jfinal集成的cron4j比较简单,时间到了就执行,不管上一次是否执行完。如果需要复杂的定时任务,利用参照Cron4jPlugin可方便地集成

flash866

2019-12-04 10:03

@flyinkeke 意思就是cron4j是每次到时间后就会创建一个新线程处理对吧?

JFinal

2019-12-06 23:03

@flash866 每次到时间后任务会被调度,线程是从线程池中取出来用的,不是创建的新线程

热门反馈

扫码入社