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

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

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

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

大神求解
2018-02-11 15:37 添加评论 分享
已邀请:
0

maq

赞同来自:

一个 Worker 是一个进程。

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

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

要回复问题请先登录注册

退出全屏模式 全屏模式 回复