我有一个使用oldsound/rabbitmq-bundle在symfony2应用程序中实现的rabbitmq-consumer。 该应用程序每次消费10条消息,并使用message-data中提供的过滤器从mysql-db收集数据,使用doctrine-querybuilder实现。 缓存系统是APC。 考虑到查询的简化代码,请参考下面:
$qb = $this->entityManager
->getRepository('My\Entity')
->createQueryBuilder();
$qb
->select('sum(this) as this, sum(that) as that')
->andWhere('field in (:values)')
->setParameter('values', $filterValues);
$result = $qb
->getQuery()
->setSingleResult();
这个查询针对不同的过滤器值返回了10次相同的数据。当消费者重新启动并消费下一批10条消息时,我再次得到10次不同的结果。我认为这可能是doctrine-cache造成的,并尝试像这样使缓存无效:
$qb = $this->entityManager
->getRepository('My\Entity')
->createQueryBuilder();
$qb
->select('sum(this) as this, sum(that) as that')
->andWhere('field in (:values)')
->setParameter('values', $filterValues);
$result = $qb
->getQuery()
->setResultCacheLifetime(0)
->setSingleResult();
但是没有效果。 我可以通过仅一次消费1个消息来解决此问题,但这会使我的应用程序减速到无法接受的程度。
有人可以给我指点正确的方向吗?
谢谢, jojo