我正在使用Amazon SQS排隊處理消息。我有基準,我只能以約400條消息/秒的速度將lib放入隊列中。我使用發送消息的上限爲10.SQS亞馬遜在服務器之間調節請求
我的第二個問題是SQS正在被遠程使用(即:我有一個服務器正在創建不在亞馬遜或EC2實例旁邊的消息)。
我的目標是增加這個瓶頸,因爲我至少要做10K的請求。
這是因爲網絡延遲而失敗嗎?或者可以有更好的解決方案來實現SQS或代碼重新調整。
此外,SQS的lib是PHP。
編輯:代碼添加
use Aws\Sqs\SqsClient;
class Sqs implements QueueInterface
{
private static $_instance = null;
private $_client = null;
protected function __construct($setting)
{
if ($this->_client === null) {
try {
$this->_client = SqsClient::factory($setting);
} catch (Exception $e) {
$this->_client = null;
}
}
}
public static function getQueue($setting)
{
if (self::$_instance === null) {
self::$_instance = new Sqs($setting);
}
return self::$_instance;
}
public function put(Data\DataRepository $data, $queueName)
{
$attributes=array();
if (!$this->_client) return false;
return self::_putToClient($this->_client, $data->getData(), $queueName, $attributes);
}
/**
* Put data into the queue using a defined client.
*
* @param mixed $client The client to use.
* @param mixed $data The data to insert.
* @param string $queueName The name of the queue in which to insert.
* @param mixed $attributes Some attributes for the client (QueueAttribute::DELAY_SECONDS)
*
* @return string The job id in the queue or false if a problem happened.
*/
private static function _putToClient($client, $data, $queueName, $attributes=array())
{
try {
$result = $client->createQueue(array('QueueName' => $queueName, 'Attributes' => $attributes));
$queue_url = $result->get('QueueUrl');
$response = $client->sendMessage(array('QueueUrl' => $queue_url, 'MessageBody' => $data));
return $response->getPath('MessageId');
} catch (Exception $e) {
return false;
}
}
}
也許都是。你的代碼是什麼樣的?您是否使用適用於PHP的AWS開發工具包? –
@JeremyLindblom yup「aws/aws-sdk-php」:「2.4.10」 – azngunit81
您是否爲每封郵件創建了一個新隊列? –