CNode

怎么设计异步的Rest api?

问答
Zzhengboah发布于7 年前最后回复7 年前10 回复6133 浏览0 收藏

在我们开发rest api时,有些接口处理时间比较长,可能直接先返回,然后生成一个任务,放在后台执行。

面对这样的需求,请问一般是通过什么方式进行处理,比如生产者消费者模式?

查看回复

回复 (10)

C
captainblue2013#1·7 年前

老规矩,返回一个id / taskID 之类, 回头再轮训或者push , 都行

Z
zhengboah#2·7 年前
引用 captainblue2013老规矩,返回一个id / taskID 之类, 回头再轮训或者push , 都行

@captainblue2013 假如把任务放在mysql中,我想通过一个nodejs进程去进行执行具体的任务,这个程序怎么写比较好?

L
liangtongzhuo#3·7 年前
引用 zhengboah@captainblue2013 假如把任务放在mysql中,我想通过一个nodejs进程去进行执行具体的任务,这个程序怎么写比较好?

@zhengboah 一个 API 插入表数据,一个 API 查询任务执行状态。 Node 循环这个表执行,遇到未执行的任务,修改数据为执行中,执行结束修改数据为执行结束。

前端轮询查询任务执行状态

L
libook#4·7 年前

消息队列,比如kafka。

用户发请求到服务器,服务器在数据库里记录任务t正在处理中,服务器将向消息队列A发送任务t,消费者服务不断从消息队列A中取任务,取到任务t的时候就处理它,处理完后把结果发送到消息队列B,消息队列B把执行结果记录到数据库中,客户端发起查询任务t的执行结果的请求,服务器返回t的执行结果。

Z
zswnew#6·7 年前

用redis streams, 很方便

来自酷炫的 CNodeMD

F
fightAndLearn#7·7 年前

队列+socket

Z
zhengboah#8·7 年前
引用 captainblue2013@zhengboah 另一个服务啊,你不会只能写api吧

@captainblue2013 我知道用node服务,但是只能写个定时任务或循环去去队列里的任务,然后执行,有没有什么方法能够做到队列有任务时,能驻点去调用任务执行服务?

C
cnlile#9·7 年前

MQ 队列,确切的说是用rabbitMQ。。。。。kafka 不适合做业务消息,因为没有ack机制保证消息100%触达。 需要一个写队列的处理,一个收队列的消息的处理

参与回复
登录后即可参与回复。登录