woker定时任务定时取redis队列取数据,然后插入到mongodb中,但是会有一定规律性的出现无法插入的问题

0

woker定时任务定时取edis取队列数据,然后插入到mongodb中。当redis队列长期没有数据的时候,然后又在队列里新增一条数据,workerman的定时器取出来后却没有插入到Mongodb中,再次在队列中放入一条数据后,workerman的定时器取出队列的数据后又能插入到mongodb中。例如:今天早晨我队列中没有数据,当提交一条数据到队列中后,定时器一执行便将队列中数据取出,但是这一次并没有插入到Mongodb中,不过接下来再次提交数据到队列中后,就不会出现这个问题了。等过很长时间,大约八九个小时甚至半天的时间,又会出现那个问题。定时器设置的是每秒执行一次。

已邀请:

xiuwang

赞同来自:

我遇到过mysql出现过类似的问题,后来发现是mysql连接长时间没通讯就会被mysql服务端关闭,然后报mysql gone away 错误。


感觉你的mongodb也是一样,连接很长时间没通讯被mongodb服务端关闭了,然后再用这个连接插入数据到mongodb就会失败,然后再次插入时mongodb检测到之前关闭了,又重新连接,结果后面的数据插入成功。


其实如果长时间不通讯,我觉得没必要用mongodb mysql长连接,用的时候连,用完就关闭这样最不容易报错。因为本来通讯次数就少,mongodb mysql长连接没必要。

maq

赞同来自:

@wo642436249: new MongoClient() 并不是重新连接,在同一个进程中它用的是同一个持久连接。


既然插入失败,你有没有检查返回值?有没有重试?

要回复问题请先登录注册