Symfony Worker-使用消息-EntityManager
我将Symfony 4与messenger一起使用,并且我使用一个将我的消息作为长期运行的进程使用的工作者 如果我删除我的帖子并重新创建一个新的帖子,然后发送我的邮件,我的信条会有一个bug$post拥有旧数据,而不是新数据 我已经尝试了很多东西,但都不起作用,当我重新启动我的工人时,它就起作用了Symfony Worker-使用消息-EntityManager,symfony,doctrine-orm,doctrine,symfony-messenger,Symfony,Doctrine Orm,Doctrine,Symfony Messenger,我将Symfony 4与messenger一起使用,并且我使用一个将我的消息作为长期运行的进程使用的工作者 如果我删除我的帖子并重新创建一个新的帖子,然后发送我的邮件,我的信条会有一个bug$post拥有旧数据,而不是新数据 我已经尝试了很多东西,但都不起作用,当我重新启动我的工人时,它就起作用了 class ChannelMessageHandler implements MessageHandlerInterface { private $channel; private $
class ChannelMessageHandler implements MessageHandlerInterface
{
private $channel;
private $bus;
public function __construct(ChannelService $channel, MessageBusInterface $commandBus)
{
$this->channel = $channel;
$this->bus = $commandBus;
}
public function __invoke(ChannelMessage $channelMessage)
{
$error = $this->channel->handleChannel($channelMessage->getUser(), $channelMessage->getService());
if ($error) {
throw new Exception($error[0]);
}
$this->bus->dispatch(new FeedMessage($channelMessage->getUser(), $channelMessage->getService()));
}
}
}
我的MessageHandler调用服务:
class ChannelService implements ContainerAwareInterface
{
use ContainerTrait;
protected $em;
protected $logger;
public function __construct(EntityManagerInterface $entityManager, LoggerInterface $logger)
{
$this->em = $entityManager;
$this->logger = $logger;
}
public function handleChannel($userId, $serviceName)
{
$user = $this->em->getRepository('App:User\Authentication\User')->findOneById($userId);
$post = $user->getPost();
return $this->getUserAnalyticBy($post, $serviceName);
}
非常感谢如果执行:$this->em->refresh($user),它看起来很有效;但是这是一个好的做法吗?$this->em->clear()也在开始工作时使用。您需要使用刷新或完全重新加载它是的。如果不这样做,Doctrinne将从缓存中获取实体。此行为已在Symfony 4.4中修复,请参阅PR