Computação em nuvem com PHP, Parte 3: Usando o Amazon SQS com o Zend Framework

Usando filas de mensagens simples com o Zend Framework

O Zend Framework contém várias classes que facilitam o uso de serviços baseados em nuvem. A Parte 1 desta série "Computação em nuvem com PHP" enfoca o uso de classes Zend com o serviço de armazenamento em nuvens S3 da Amazon. A Parte 2 aborda as classes Zend que facilitam o trabalho com máquinas virtuais em Amazon Elastic Compute Cloud (EC2). Este artigo se concentra nas classes Zend que servem para trabalhar com Amazon Simple Queue Service (SQS).

Doug Tidwell, Cyber Evangelist for developerWorks, IBM

Photo of Doug TidwellDoug Tidwell é um senior software engineer no grupo Emerging Technology da IBM. Ele foi orador na primeira conferência de XML em 1997, e vem trabalhando com linguagens de marcação, serviços da Web e SOA (as tecnologias subjacentes às nuvens) há muitos anos. Suas apresentações foram realizadas em dezenas de conferências ao redor do mundo, e sua apresentação na JavaOne sobre computação em nuvem deu a ele o prêmio Rock Star em 2009. Seu trabalho como divulgador tecnológico consiste em explicar os padrões e tecnologias por trás da computação em nuvem e ajudar os clientes a integrá-los em suas arquiteturas e estratégias de negócio gerais. Ele é autor de diversos artigos do developerWorks, assim como do livro da O'Reilly's sobre XSLT, que é um presente perfeito para qualquer ocasião. Ele reside em Chapel Hill, NC, EUA, com sua esposa, sua filha e seu cachorro.



06/Out/2011

O Amazon SQS fornece as funções básicas de um sistema de enfileiramento de mensagens. Embora o SQS não seja projetado para substituir um sistema de mensagens de classe empresarial, ele possui uma grande variedade de recursos úteis. Este artigo examina os métodos no Zend Framework que facilitam o trabalho com mensagens e filas em SQS.

Introdução

Neste artigo, você verá como realizar diversas tarefas importantes com o Simple Queue Service. Como ocorre em todos os artigos nesta série, será possível aproveitar ao máximo os exemplos se você tiver o Zend Framework instalado antes de começar. Se o Zend Framework não estiver instalado, faça o download e instale o pacote completo a partir de Zend.com (consulte Recursos). Isso instalará o Zend Framework, PHP e o servidor Apache Web na sua máquina. Após a conclusão da instalação, acesse http://localhost/ZendServer/. Veja a documentação de instalação do Zend Framework para obter os detalhes. Se for possível efetuar login no console do ZendServer, está tudo pronto.

Também será necessário configurar uma conta no Amazon (consulte Recursos).

Os exemplos usam a classe PHP Credentials criada na Parte 1. Essa classe gerencia as credenciais da sua conta Amazon. As credenciais são armazenadas em um arquivo .ini:

Listagem 1. Armazenando credenciais em um arquivo .ini PHP
; Configuration file to hold secret keys, account numbers and other useful
; strings for Amazon and other cloud accounts.

[amazon]
accessKey=0123456789ABCDEFGHIJ
secretKey=0123456789abcdefghiABCDEFGHI1234567890AB
ownerId=123456789012

O SQS usa apenas sua chave de acesso e uma chave secreta. Não é necessário saber seu ID do proprietário, mas ele fará parte do nome da fila quando você criar uma fila de mensagens.


Sobre o aplicativo de exemplo

O aplicativo de exemplo consiste de uma única página PHP (sqs.php) que executa diversas funções:

  • Lista todas as filas de mensagens em uma conta, incluindo o número de mensagens em cada uma
  • Cria uma fila de mensagens
  • Cria uma mensagem e a coloca em uma fila
  • Recebe uma mensagem de uma determinada fila
  • Exclui uma mensagem recebida
  • Exclui uma fila de mensagens juntamente com as mensagens presentes nela.

Para começar, crie um objeto Zend_Service_Amazon_Sqs.

Listagem 2. Criando um objeto Zend_Service_Amazon_Sqs

Clique aqui para ver lista de códigos

Listagem 2. Criando um objeto Zend_Service_Amazon_Sqs

require_once 'Zend/Service/Amazon/Sqs.php';
require_once 'Credentials.php';

$creds = new Credentials;
$sqs = new Zend_Service_Amazon_Sqs($creds->getCredential('amazon', 'accessKey'), $creds->getCredential('amazon', 'secretKey'));

Esse objeto permite trabalhar com as filas associadas à sua conta. O método Zend_Service_Amazon_Sqs->getQueues() retorna um array de todos os nomes de filas que a sua conta possui. A página PHP os exibe em uma tabela:

Figura 1. Relacionando suas filas SQS
Relacionando suas filas SQS

Os nomes das filas de mensagens incluem o ID do proprietário da sua conta. Neste exemplo, as filas pertencem ao ID do proprietário 123456789012. É necessário usar o nome de fila totalmente qualificado (http://queue.amazonaws.com/ownerId/queueName) ao acessar uma fila ou uma mensagem. A parte da tabela visível aqui também inclui o número de mensagens visíveis em cada fila. O código PHP tem a seguinte aparência:

Listagem 3. Obtendo a lista de filas e o número de mensagens em cada uma
$queues = $sqs->getQueues();
foreach ($queues as $queue) {
  try {
 $messageCount = $sqs->count($queue);
    echo "<tr>";
    echo "<td>".$queue."</td>";
    echo "<td style='text-align: center;'>".$messageCount."</td>";

O código usa o método count() para ver quantas mensagens há em cada fila. (Para ser preciso, trata-se do número aproximado de mensagens; falarei mais sobre isso em um minuto.) Se a fila tiver pelo menos uma mensagem, o PHP cria um botão para receber a próxima mensagem; caso contrário, a célula fica em branco (consulte a Figura 2).

Listagem 4. Criando um botão para receber a próxima mensagem
echo "<td>";
if ($messageCount) {
  echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>";
  echo "<input type='hidden' name='getNextMessage' value='1'>";
  echo "<input type='hidden' name='queueToUse' value='$queue'/>";
 echo "<input type='submit' value='Receive Next Message'>";
  echo "</form>";
} 
else
  echo "&nbsp;";
 echo "</td>";

A última célula em cada linha da tabela cria um botão para excluir a fila e as mensagens nela. A tabela completa de filas é semelhante à da Figura 2.

Figura 2. A tabela completa de filas
A tabela completa de filas

Nesta captura de tela, há três filas. As duas filas que contêm mensagens são exibidas com um botão "Receive Next Message". Cada linha da tabela tem um botão "Delete Queue" para excluir uma determinada fila.


Criando uma fila

Criar uma fila é muito simples. Basta obter o nome da fila e chamar o método Zend_Service_Amazon_Sqs->create(). A página PHP inclui um formulário simples para inserir o nome da fila:

Figura 3. Criando uma fila
Criando uma fila

O código para criar uma nova fila é simples.

Listagem 5. Criando uma fila
try {
  $responseCode = $sqs->create($_POST['queueToCreate']);
  if ($responseCode)
    echo "The queue ".$_POST['queueToCreate']." was created successfully.";
  . . .
}
catch (Zend_Service_Amazon_SQS_Exception $sqse) {
  echo "The queue could not be created. The error message from Amazon is:";
  echo "<br/><br/><i>".$sqse->getMessage()."</i>";
}

O Zend não fornece nenhuma manipulação especial de erros para o método create(), de forma que o código simplesmente escreve os detalhes da exceção para a página, se houver algum erro. A criação de uma fila com um nome ilegal (queue#3, por exemplo) retorna a exceção InvalidParameterValue, enquanto a criação de uma fila com um nome duplicado retorna QueueAlreadyExists. Quando a fila é criada com sucesso, a página é iniciada com uma mensagem de êxito.

Listagem 4. Fila criada com êxito
Listagem 4. Fila criada com êxito

Criando uma mensagem

A página PHP também tem um formulário breve para a criação de uma mensagem.

Figura 5. Criando uma mensagem
Criando uma mensagem

Observe que a lista suspensa é preenchida com os nomes de filas da sua conta.

Figura 6. Relacionando todas as filas em sua conta
Relacionando todas as filas em sua conta

O código PHP para criar a lista suspensa tem a aparência da Listagem 6.

Listagem 6. Criando uma lista suspensa de todas as filas
<p>Select a queue:</p>
<select name="queueForNewMessage"> 
<?php
 foreach ($queues as $queue) { echo "<option>".$queue."</option>";
  }
?>
</select>
</code>

O código para criar uma nova mensagem usa o método send().

Listagem 7. Enviando uma mensagem para uma fila
try {
 $response = $sqs->send($_POST['queueForNewMessage'], $_POST['newMessage']);
  if ($response) {
    echo "The new message was successfully created in queue ";
    echo $_POST['queueForNewMessage'];
    echo ".<br/>The message ID is ".$response.".";
  }
  else {
    echo "The new message could not be created in queue ";
    echo $_POST['queueForNewMessage'];
    echo ".";
  }
}
catch (Zend_Service_Amazon_SQS_Exception $sqse) {
  echo "The message could not be created. The error message from Amazon is:";
  echo "<br/><br/><i>".$sqse->getMessage()."</i>";
}

O código envia a solicitação para a Amazon. Se ocorrer algo errado durante a criação da mensagem, a página exibe uma exceção. Na maior parte dos casos, a página exibe o ID da mensagem criada com êxito.

Figura 7. Mensagem criada com êxito
Mensagem criada com êxito

A mensagem de êxito inclui o ID da nova mensagem. Você verá o ID da mensagem novamente mais tarde quando receber a mensagem.


Algumas palavras sobre a latência de propagação

Um dos problemas em sistemas distribuídos como o SQS é a latência de propagação. Visando ao desempenho e a confiabilidade, a maior parte dos provedores de nuvens tem várias cópias das suas informações espalhadas nas redes. O lado positivo desse design é que, se uma determinada máquina ficar inativa, suas informações estarão presentes em algum outro local da rede. O lado negativo dessa abordagem é que leva algum tempo para que as alterações nas suas informações percorram toda a rede. Esse atraso é chamado de latência de propagação. Se você instalar o aplicativo de exemplo desenvolvido neste artigo, perceberá seus efeitos.

Quando você cria uma fila, a página PHP exibe uma mensagem de êxito, indicando que a fila foi criada com sucesso. A página exibe também uma tabela relacionando todas as filas em sua conta. A lista de filas retornada pelo SQS geralmente contém a fila que acaba de ser criada. Por outro lado, se você criar uma mensagem, é quase certo que a tabela de filas não mostrará o número correto de mensagens porque a mensagem não percorreu seu caminho até a fila. Por exemplo, se você criar uma nova mensagem em uma fila que atualmente tem três mensagens, os dados retornados pelo SQS indicarão que a mensagem foi criada com sucesso, e que há apenas três mensagens na fila.

Para lidar com esse atraso, a página contém um botão para atualizar a lista de filas.

Figura 8. Atualizando a lista de filas
Atualizando a lista de filas

Se você clicar nesse botão para atualizar a fila, em algum momento a tabela passará a ter o número correto de mensagens. (O botão de atualização permite que o usuário atualize a tabela sem reenviar a solicitação para criar uma mensagem.) Para o aplicativo de exemplo apresentado aqui, a latência de propagação pode ser uma problema quando você excluir uma fila. Mesmo que o SQS relate que excluiu a fila com sucesso, frequentemente o nome aparecerá na lista. Se você pedir ao SQS o número de mensagens na fila, será exibida uma exceção. Por esse motivo, o código que gera a lista de filas usa um bloqueio try para obter o número de mensagens em uma fila. Se a chamada ao método count() falhar, o código simplesmente ignora a exceção.

Para usar o SQS com eficiência, é necessário estar ciente da realidade da latência de propagação. Isso também se aplica a vários outros serviços em nuvem.


Recebendo uma mensagem

O processamento de uma mensagem em uma fila tem duas etapas: o recebimento e a exclusão. Quando uma mensagem é recebida, o Amazon SQS marca a mensagem como invisível. A mensagem deve ser processada por você, portanto ninguém que acessar a fila poderá vê-la. Depois que uma mensagem é recebida, é sua responsabilidade exclui-la dentro de um determinado período de tempo. Cada fila é definida com um tempo limite de visibilidade; se você não excluir a mensagem dentro desse período, ela se tornará novamente visível e poderá ser processada por qualquer pessoa. Atualmente, o tempo limite de visibilidade padrão de uma fila é de 30 segundos.

À parte disso, quando você cria uma fila, a Amazon permite que você defina o tempo limite de visibilidade para todas as mensagens processadas. O Zend Framework suporta um segundo parâmetro para o método Zend_Service_Amazon_Sqs->create() para definir o tempo limite de visibilidade.

Listagem 8. Criando uma fila com um limite de visibilidade especificado
 $responseCode = $sqs->create($_POST['queueToCreate'], 120);

Neste exemplo, o limite de visibilidade é de 2 minutos.

O recebimento de uma mensagem de uma fila é realizado com o método Zend_Service_Amazon_Sqs->receive(). O nome da fila de mensagens é transmitido a partir do formulário. Uma vez que uma mensagem pode ter até 8.000 caracteres, ela é exibida em um controle HTML <textarea>. Uma mensagem recebida tem quatro partes:

  • O body, o texto da mensagem em si
  • A compilação md5 do corpo da mensagem
  • O message_id, um identificador exclusivo da mensagem
  • O handle, identificador que deve ser usado para excluir a mensagem da fila.

É possível acessar as quatro partes da mensagem com as chaves de array indicadas acima. Por exemplo, é possível usar $message[0]['body'] para obter o corpo da mensagem, enquanto $message[0]['handle'] retorna o identificador da mensagem. Observe que, embora o Amazon SQS permita solicitar mais de uma mensagem por vez, o Zend Framework não permite. Toda chamada para Zend_Service_Amazon_Sqs->receive() retorna uma única mensagem. Porém, a mensagem única é retornada em um array, portanto é necessário usar $message[0][...] para acessar as partes da mensagem.

Observação: Alguns sistemas de mensagens permitem ver uma mensagem sem recebê-la, uma operação geralmente chamada peeking. O Amazon SQS não permite mais a realização essa operação. A única forma de ver uma mensagem é recebê-la.

Quando você clicar no botão "Receive Next Message", verá algo semelhante à Figura 9.

Figura 9. Uma mensagem recebida
Uma mensagem recebida

O tempo limite de visibilidade é usado para gerar a frase "It will go back into the queue in 30 seconds". Falarei mais sobre atributos de fila em um minuto.

Figura 10. O identificador da mensagem e o tempo limite de visibilidade
O identificador da mensagem e o tempo limite de visibilidade

Conforme mencionado, $message[0]['handle'] retorna o identificador da mensagem. É possível usar o método getAttribute() para retornar o tempo limite de visibilidade.

Listagem 9. Descobrindo o tempo limite de visibilidade da fila
$visibilityTimeout = 
 $sqs->getAttribute($_POST['queueToUse'], 'VisibilityTimeout');

O tempo limite de visibilidade é usado para gerar a frase "It will go back into the queue in 30 seconds". getAttribute() permite descobrir vários detalhes de uma fila; falarei sobre atributos de filas em um minuto.

O formulário que exibe a mensagem recebida é gerado com este código.

Listing 10. Generating the form for a received message
echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>";

// Display the message itself in a <textarea>
echo "The message from the queue is: <br/><br/>";
echo "<textarea cols='80' rows='8'>";
echo $message[0]['body'];
echo "</textarea><br/><br/>";

// The message handle and queue name are hidden fields
echo "<input type='hidden' name='deleteMessage' value='1'/>";
echo "<input type='hidden' name='messageHandle' ";
echo "value='".$message[0]['handle']."'>";
echo "<input type='hidden' name='queueToUse' ";
echo "value='".$_POST['queueToUse']."'>";

// The submit button deletes the message 
echo "To delete this message, click here: ";
echo "<input type='submit' value='Delete Message'><br/><br/>";

// Display the message handle if the user wants to delete it later
echo "If you want to delete this message ";
echo "later, use this message handle: <br/><br/>";
echo "<textarea cols='80' rows='3'>";
echo $message[0]['handle']."</textarea><br/><br/>";

// For information, display the visibility timeout of the queue
echo "If you do not delete this message, it will  ";
echo "go back into the queue in ".$visibilityTimeout." seconds.";
echo "</form>";

Excluindo uma mensagem

Como foi possível observar na seção anterior, o formulário que exibe uma mensagem recebida também contém um botão para excluir a mensagem. A chamada ao método Zend_Service_Amazon_Sqs->deleteMessage() requer o nome da fila e o identificador da mensagem.

Listagem 11. Excluindo uma mensagem de uma fila
try {
 $response = $sqs->deleteMessage($_POST['queueToUse'], $_POST['messageHandle']);
  echo "The message was deleted successfully.";
}
catch (Zend_Service_Amazon_SQS_Exception $sqse) {
  echo "The message could not be deleted. The error message from Amazon is:";
  echo "<br/><br/><i>".$sqse->getMessage()."</i>";
}

Se a mensagem for excluída com êxito, a página exibe uma mensagem.

Figura 11. Exclusão bem-sucedida da mensagem
Exclusão bem-sucedida da mensagem

Se ocorrer algum erro, o código simplesmente exibe uma exceção. (A criação de um formulário para que o usuário exclua uma mensagem colando o identificador de mensagens e o nome da fila fica como exercício para o leitor.)


Obtendo os atributos de uma fila

Como você viu anteriormente, a página PHP exibe o tempo limite de visibilidade de uma fila quando uma mensagem é recebida. Isso é feito chamando getAttribute(). O primeiro atributo de getAttribute() é o nome da fila. Para o segundo argumento, a Amazon atualmente suporta os seguintes nomes de atributos (maiúsculas e minúsculas são diferenciadas):

  • VisibilityTimeout— O tempo limite de visibilidade das mensagens recebidas da fila.
  • ApproximateNumberOfMessages— O número aproximado de mensagens atualmente na fila. Isso não inclui quaisquer mensagens que tenham sido recebidas.
  • ApproximateNumberOfMessagesNotVisible— O número aproximado de mensagens que foram recebidas e ainda não foram excluídas.
  • CreatedTimestamp— Quando a fila foi criada.
  • LastModifiedTimestamp— A última vez que os atributos ou as permissões da fila foram alterados. O envio, recebimento ou exclusão de uma mensagem não altera esse registro de data e hora.
  • All— Retorna todos os atributos. Esse é o padrão.

Observação: Lembre-se de que se você chamar getAttribute() ou getAttribute('All'), o Zend atualmente retorna apenas o primeiro atributo. Esse erro provavelmente será corrigido em um release futuro. Por enquanto, se você desejar obter todos os atributos de uma fila, será necessário chamar getAttribute() para cada um. É possível gerar uma tabela relacionando todas as filas e seus atributos com o código na Listagem 12.

Listagem 12. Exibindo todas as filas e seus atributos
<?php
  $queues = $sqs->getQueues();
  foreach ($queues as $queue) {
    try {
      echo "<tr>";
      echo "<td>".$queue."</td>";
      echo "<td style='text-align: center;'>";
      echo $sqs->getAttribute($queue, 'VisibilityTimeout');
      echo "</td><td style='text-align: center;'>";
      echo $sqs->getAttribute($queue, 'ApproximateNumberOfMessages');
      echo "</td><td style='text-align: center;'>";
      echo $sqs->getAttribute($queue, 'ApproximateNumberOfMessagesNotVisible');
      echo "</td><td style='text-align: center;'>";
      echo $sqs->getAttribute($queue, 'CreatedTimestamp');
      echo "</td><td style='text-align: center;'>";
      echo $sqs->getAttribute($queue, 'LastModifiedTimestamp')."</td>";
      echo "</tr>";
    }
    catch (Zend_Service_Amazon_SQS_Exception $sqse) {
    }
  }
?>

A tabela de atributos tem a seguinte aparência.

Figura 12. Todos os atributos de uma fila
Todos os atributos de uma fila

(Esse código está incluído nos exemplos como sqs-attributes.php.)


Excluindo uma fila

A exclusão de uma fila exclui a fila e as mensagens que ela contém, incluindo mensagens atualmente invisíveis. Uma vez que essa é uma operação drástica, um caixa de diálogo de confirmação aparece antes que a fila seja realmente excluída.

Figura 13. A exclusão de uma fila deve ser confirmada
A exclusão de uma fila deve ser confirmada

Quando o PHP gera o formulário para excluir uma fila, ele define a caixa de diálogo de confirmação com o atributo onsubmit do elemento <form>.

Listagem 13. Criando um botão para excluir a fila

Clique aqui para ver lista de códigos

Listagem 13. Criando um botão para excluir a fila

echo "<td>";
echo "<form action='".$_SERVER['PHP_SELF']."' method='post' ";
echo "onsubmit='return confirm(\"Do you really want to delete the ";echo "queue $queue? This will delete all any messages in the queue ";echo "as well.\");'>";
echo "<input type='hidden' name='deleteQueue' value='1'/>";
echo "<input type='hidden' name='queueToDelete' value='$queue'/>";
echo "<input type='submit' value='Delete Queue'>";
echo "</form>";
echo "</td>";

Se o usuário clicar no botão OK para excluir a fila, a fila e todas as mensagens que ela contém são excluídas pelo método delete().

Listagem 14. Excluindo uma fila
try {
 $response = $sqs->delete($_POST['queueToDelete']);
  echo "The queue was deleted successfully.";
}
catch (Zend_Service_Amazon_SQS_Exception $sqse) {
  echo "The queue could not be deleted. The error message from Amazon is:";
  echo "<br/><br/><i>".$sqse->getMessage()."</i>";
}

Como ocorre na exclusão de uma mensagem, a exclusão de uma fila exibe uma mensagem de êxito ou uma exceção.

Figura 14. Exclusão bem-sucedida da fila
Exclusão bem-sucedida da fila

Se ocorrer algum erro, o código simplesmente exibe uma exceção.


Tópicos avançados

Existem diversas operações suportadas pelo Amazon SQS que não fazem parte da classe Zend_Service_Amazon_Sqs. Trataremos dessas operações de forma breve, embora elas estejam fora do escopo do Zend Framework. Para executar alguma dessas tarefas, é necessário usar uma das APIs de nível inferior oferecidas pela Amazon. As outras operações são:

  • AddPermission: É possível definir permissões para que outros usuários possam acessar suas filas. Isso permite que você use suas filas como uma forma de coordenar o trabalho entre diferentes aplicativos.
  • RemovePermission: Também é possível revogar permissões.
  • SetQueueAttributes: O Zend permite obter os atributos de uma fila, mas não permite a alteração de nenhum deles.
  • ChangeMessageVisibility: Depois que você receber uma mensagem, é possível alterar seu tempo limite de visibilidade. Isso lhe dá mais tempo para processar a mensagem antes que ela retorne para a fila. Esse método se aplica apenas à mensagem recebida; ele não altera o tempo limite de visibilidade padrão da fila em si.

Consulte a documentação do SQS para obter mais detalhes sobre esses métodos.


Resumo

Este artigo apresentou uma página PHP que permite que você trabalhe com o Amazon Simple Queue Service. É possível usar a página para criar e excluir filas de mensagens, enviar e receber mensagens e monitorar o status das filas. Os detalhes técnicos das solicitações que são de fato enviadas para a Amazon ficam ocultos em um objeto PHP, facilitando o uso de filas e mensagens. O uso do Zend Framework oferece um refinado conjunto de objetos para trabalhar com a computação em nuvem.


Download

DescriçãoNomeTamanho
Sample codeos-php-cloud3-source.zip5KB

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=483017
ArticleTitle=Computação em nuvem com PHP, Parte 3: Usando o Amazon SQS com o Zend Framework
publish-date=10062011