Symfony Worker-使用消息-EntityManager

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 $

我将Symfony 4与messenger一起使用,并且我使用一个将我的消息作为长期运行的进程使用的工作者

如果我删除我的帖子并重新创建一个新的帖子,然后发送我的邮件,我的信条会有一个bug$post拥有旧数据,而不是新数据

我已经尝试了很多东西,但都不起作用,当我重新启动我的工人时,它就起作用了

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