我有一个控制器,假设运行import
. 导入过程可能需要很长时间,所以我决定使用message queue
(异步)。我创建了一个wrapper
接口,该接口具有import
封装实现的方法。从控制器的角度来看,它不应该关心它是如何导入的(无论是直接导入还是异步导入)。但是原始代码可能会抛出异常,如果它是异步的,则无法在控制器中捕获这些异常。
public function execute()
{
try {
$this->importer->import();
$this->messageManager->addSuccessMessage(__('The import has been successfully performed.'));
} catch (Exception $e) {
$this->logger->error($e->getMessage());
}
我的意思是问题在于,如果我将异步导入器与原始导入器交换,我们可以知道它是成功还是失败。但是当我们使用异步的时候,代码不能简单地输出“导入成功”,也不能输出“导入已经调度”,因为这是一个实现细节泄漏。
有关如何解决此问题的任何建议?
更新:我认为这是两个不同的职责:
- 进口
- 安排导入
所以我想它们根本不能互换。