使用workerman作为rabbitmq的守护进程,开了10个消费进程。
代码中mysql用到事务处理,实际使用中发现会发生死锁问题 导致业务代码无法正常运行。应该是多个进程访问事务导致的。我目前想到的解决方案:在处理代码之前用redis标记是否有进程在处理,如果有则不往下执行业务(并将当前任务重新推入mq比如3分钟后再执行) 处理完后解锁。
不知道正确的姿势是怎么样的?使用多进程是因为rabbitmq 消费进程在单进程情况下任务一多就会出现 Unacked现象(应该是进程阻塞住了 出现假死现象),不知道是不是任务太多消费进程来不及确认导致的,所以想测试下多进程能否解决这种情况(随便吐槽下该论坛页面停留过长 不让发帖的BUG)