Guia de início rápido: enviar eventos para Hubs de Eventos do Azure usando C
Introdução
Os Hubs de Eventos do Azure são uma plataforma de fluxo de Macrodados e um serviço de ingestão de eventos capaz de receber e processar milhões de eventos por segundo. Os Hubs de Eventos podem processar e armazenar eventos, dados ou telemetria produzidos por dispositivos e software distribuído. Os dados enviados para um hub de eventos podem ser transformados e armazenados em qualquer fornecedor de análise em tempo real ou adaptadores de armazenamento/criação de batches. Para uma descrição geral detalhada dos Hubs de Eventos, veja Descrição geral dos Hubs de Eventos e Funcionalidades dos Hubs de Eventos.
Este tutorial descreve como enviar eventos para um hub de eventos usando um aplicativo de console em C.
Pré-requisitos
Para concluir este tutorial, precisa do seguinte:
- Um ambiente de desenvolvimento C. Este tutorial assume a pilha gcc em uma VM Linux do Azure com o Ubuntu 14.04.
- Microsoft Visual Studio:
- Crie um namespace de Hubs de Eventos e um hub de eventos. Use o portal do Azure para criar um namespace do tipo Hubs de Eventos e obter as credenciais de gerenciamento de que seu aplicativo precisa para se comunicar com o hub de eventos. Para criar um namespace e um hub de eventos, siga o procedimento neste artigo. Obtenha o valor da chave de acesso para o hub de eventos seguindo as instruções do artigo: Obter cadeia de conexão. Você usa a chave de acesso no código que você escreve mais adiante neste tutorial. O nome da chave padrão é: RootManageSharedAccessKey.
Escrever código para enviar mensagens para Hubs de Eventos
Nesta seção mostra como escrever um aplicativo C para enviar eventos para seu hub de eventos. O código usa a biblioteca Proton AMQP do projeto Apache Qpid. Isso é análogo ao uso de filas e tópicos do Service Bus com AMQP de C, conforme mostrado neste exemplo. Para obter mais informações, consulte a documentação do Qpid Proton.
Na página Qpid AMQP Messenger, siga as instruções para instalar o Qpid Proton, dependendo do seu ambiente.
Para compilar a biblioteca Proton, instale os seguintes pacotes:
sudo apt-get install build-essential cmake uuid-dev openssl libssl-dev
Faça o download da biblioteca Qpid Proton e extraia-a, por exemplo:
wget https://archive.apache.org/dist/qpid/proton/0.7/qpid-proton-0.7.tar.gz tar xvfz qpid-proton-0.7.tar.gz
Crie um diretório de compilação, compile e instale:
cd qpid-proton-0.7 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr .. sudo make install
No diretório de trabalho, crie um novo arquivo chamado sender.c com o código a seguir. Lembre-se de substituir os valores da chave/nome SAS, nome do hub de eventos e namespace. Você também deve substituir uma versão codificada por URL da chave para a SendRule criada anteriormente. Você pode codificá-lo aqui.
#include "proton/message.h" #include "proton/messenger.h" #include <getopt.h> #include <proton/util.h> #include <sys/time.h> #include <stddef.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> volatile sig_atomic_t stop = 0; #define check(messenger) \ { \ if(pn_messenger_errno(messenger)) \ { \ printf("check\n"); \ die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \ } \ } void interrupt_handler(int signum){ if(signum == SIGINT){ stop = 1; } } pn_timestamp_t time_now(void) { struct timeval now; if (gettimeofday(&now, NULL)) pn_fatal("gettimeofday failed\n"); return ((pn_timestamp_t)now.tv_sec) * 1000 + (now.tv_usec / 1000); } void die(const char *file, int line, const char *message) { printf("Dead\n"); fprintf(stderr, "%s:%i: %s\n", file, line, message); exit(1); } int sendMessage(pn_messenger_t * messenger) { char * address = (char *) "amqps://{SAS Key Name}:{SAS key}@{namespace name}.servicebus.windows.net/{event hub name}"; char * msgtext = (char *) "Hello from C!"; pn_message_t * message; pn_data_t * body; message = pn_message(); pn_message_set_address(message, address); pn_message_set_content_type(message, (char*) "application/octect-stream"); pn_message_set_inferred(message, true); body = pn_message_body(message); pn_data_put_binary(body, pn_bytes(strlen(msgtext), msgtext)); pn_messenger_put(messenger, message); check(messenger); pn_messenger_send(messenger, 1); check(messenger); pn_message_free(message); } int main(int argc, char** argv) { printf("Press Ctrl-C to stop the sender process\n"); signal(SIGINT, interrupt_handler); pn_messenger_t *messenger = pn_messenger(NULL); pn_messenger_set_outgoing_window(messenger, 1); pn_messenger_start(messenger); while(!stop) { sendMessage(messenger); printf("Sent message\n"); sleep(1); } // release messenger resources pn_messenger_stop(messenger); pn_messenger_free(messenger); return 0; }
Compile o arquivo, assumindo gcc:
gcc sender.c -o sender -lqpid-proton
Nota
Esse código usa uma janela de saída de 1 para forçar a saída das mensagens o mais rápido possível. É recomendável que seu aplicativo tente enviar mensagens em lote para aumentar a taxa de transferência. Consulte a página do Qpid AMQP Messenger para obter informações sobre como usar a biblioteca Qpid Proton neste e em outros ambientes e em plataformas para as quais as ligações são fornecidas (atualmente Perl, PHP, Python e Ruby).
Execute o aplicativo para enviar mensagens para o hub de eventos.
Parabéns! Enviou agora mensagens para um hub de eventos.
Próximos passos
Leia os seguintes artigos:
- Processador de eventos
- Recursos e terminologia nos Hubs de Eventos do Azure.