Agora que vocês já sabem o que são filas (ou queues), vou contar aqui como utilizá-las, com código. Vou seguir com um exemplo extremamente simples, presente no próprio Azure Services Training Kit. Se você não viu ainda nada de Azure Storage, recomendo dar uma olhada antes. Aqui no blog tem bastante coisa.

Queues funcionam assim: você abre um projeto qualquer, adiciona as referências do Azure, no caso a do Sample de storage do SDK que já mencionei antes, o StorageClient, e o do Astoria. Isso é tudo que precisamos. Então cria uma obtém uma fila, cria uma mensagem e a envia. Simples assim.

O código abaixo coloca um texto simples de uma fila chamada "messages". O texto vem do textbox "txtMessage", como pode ser visto na penúltima linha. A fila é criada antes se não existe (veja chamadas a "DoesQueueExist" e "CreateQueue").

            StorageAccountInfo account = new StorageAccountInfo(
                baseUri,
                null,
                accountName,
                accountKey);

            QueueStorage service = QueueStorage.Create(account);

            MessageQueue queue = service.GetQueue("messages");

            if (!queue.DoesQueueExist())
            {
                queue.CreateQueue();
            }

            Message msg = new Message(txtMessage.Text);
            queue.PutMessage(msg);

Isso é tudo para colocar uma mensagem na fila. E para tirar? Simplificando um pouco, é o que está abaixo. Note que ele cria a conta também, verifica se a fila existe, e então puxa uma mensagem. Se a mensagem existe ele a escreve no log do RoleManager. Simples assim. Depois disso seria somente verificar novamente após algum intervalo, e fazer isso infinitamente. É por isso que o trabalho se encaixa bem no worker role do Azure.

            StorageAccountInfo account = new StorageAccountInfo(
                baseUri,
                null,
                accountName,
                accountKey);

            QueueStorage service = QueueStorage.Create(account);

            MessageQueue queue = service.GetQueue("messages");
            
            if (queue.DoesQueueExist())
            {
                Message msg = queue.GetMessage();

                if (msg != null)
                {
                    RoleManager.WriteToLog("Information",
                        string.Format("Message '{0}' processed.", msg.ContentAsString()));
                    queue.DeleteMessage(msg);
                }
            }

Mais simples impossível, certo? Lembrando que a fila fica lá na nuvem, nos servidores da Microsoft. No fim das contas as chamadas são nada mais nada menos que chamadas REST.

Agora, e se eu quiser passar uma mensagem complexa? Bom, você sempre pode serializar objetos com XML, e, como todos sabemos, objetos são mensagens, e XML é texto. A partir daí é só se divertir. Enjoy!


Postado na(s) categoria(s) Azure pelo giovanni bassi em 31 de março de 2009 às 10:20 | Tags:

Comentar


(Vai mostrar seu Gravatar)

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Quem é Giovanni Bassi

Giovanni Bassi Sou uma pessoa apaixonada por tecnologia e especificamente por .Net. Sou consultor independente especialista em .Net, focado em arquitetura e melhores práticas. Tenho dezenas de artigos publicados na .Net Magazine, revista da qual sou editor técnico. Ministro palestras e cursos de vez em quando, e quando dá tempo eu respiro um pouco. Mais detalhes nesta página.

Busca

Selos

Eu vou ao TechEd Brasil 2010, e você?

MVP

MCPD

MCSD

.Net Magazine

Abaixo ao if!

Calendário

«  julho 2010  »
seteququsedo
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Ver detalhamento de posts no calendário

Blogs interessantes

    OPMLDownload OPML file

    Postagens recentes

    Comentários recentes

    Disclaimer / Aviso
    As opiniões colocadas neste blog são minhas e pessoais e não expressam necessariamente as opiniões de meus empregadores, pareceiros e amigos. Da mesma forma, os comentários feitos por leitores do blog não expressam a minha opinião.

    © Copyright 2010 .Net Unplugged
    Log in