GatewayWorker消息是按顺序处理的吗,是php代码逻辑完成再处理下一条这种吗?

cnrae

比如业务处理使用一个统一的class(class是在onWorkerStart创建的,共用)
一条消息来了,给class设置data,然后再执行class的逻辑

如果不是按顺序,那会出现,前一个消息设置了data但逻辑还没跑完,后一个消息来了后更改data导致前面一条数据异常

或者不同进程存在此问题,同一进程没问题?

大神求解

2532 1 0
1个回答

maq

一个 Worker 是一个进程。

当你的 BusinessWorker 接收到一个消息之后,只要是同步代码一直在执行,就不会被另一个消息的到来所打扰,直到你的 Events::onMessage 返回之后,当前的 Worker 就准备接收下一个消息了。

所以问题的关键在于你处理一个消息的 PHP 程序是不是完全同步执行的。如果你用到了定时器或者异步组件(react/mysql 或者 react/redis 之类),那就不好说了,很可能异步操作还没有执行完,下一个消息就到来并开始处理了。

  • 暂无评论
年代过于久远,无法发表回答
🔝