对于那些通过 AWS 和 SES 尝试解决在持久连接上完成的并行请求的问题的人来说,AWS SDK 2 及更高版本在 php 中使用命令对象对此提供了支持。
SesClient 和其他客户端可以并行执行命令。这是通过 SES 触发单个连接和电子邮件的常规方法:
$result = $client->sendEmail(array(
//email data
));
客户端对象非常强大,并且继承了许多方法来执行和操作请求,例如getCommand()
和execute()
。在我找到简单的解决方案之前,我花了好几个小时的挖掘!您只需要知道要搜索的正确内容。这是一个例子:
$commands = array();
$commands[] = $sesClient->getCommand('SendEmail', array(
//email data
));
$commands[] = $sesClient->getCommand('SendEmail', array(
//email data
));
// Execute an array of command objects to do them in parallel
$sesClient->execute($commands);
// Loop over the commands, which have now all been executed
foreach ($commands as $command) {
$result = $command->getResult();
// Do something with result
}
错误处理可以通过执行以下代码来实现:
use Guzzle\Service\Exception\CommandTransferException;
try {
$succeeded = $client->execute($commands);
} catch (CommandTransferException $e) {
$succeeded = $e->getSuccessfulCommands();
echo "Failed Commands:\n";
foreach ($e->getFailedCommands() as $failedCommand) {
echo $e->getExceptionForFailedCommand($failedCommand)->getMessage() . "\n";
}
}
Amazon 在其开发人员指南中的命令功能下记录了这些示例。