Szybki start: wysyłanie zdarzeń do usługi Azure Event Hubs przy użyciu języka C
Wprowadzenie
Azure Event Hubs to platforma do pozyskiwania i strumieniowego przesyłania danych, która umożliwia odbieranie i przetwarzanie milionów zdarzeń na sekundę. Usługa Event Hubs pozwala przetwarzać i przechowywać zdarzenia, dane lub dane telemetryczne generowane przez rozproszone oprogramowanie i urządzenia. Dane wysłane do centrum zdarzeń mogą zostać przekształcone i zmagazynowane przy użyciu dowolnego dostawcy analityki czasu rzeczywistego lub adapterów przetwarzania wsadowego/magazynowania. Aby zapoznać się ze szczegółowym omówieniem usługi Event Hubs, zobacz Omówienie usługi Event Hubs i Funkcje usługi Event Hubs.
W tym samouczku opisano sposób wysyłania zdarzeń do centrum zdarzeń przy użyciu aplikacji konsolowej w języku C.
Wymagania wstępne
Do ukończenia tego samouczka są potrzebne są następujące elementy:
- Środowisko programistyczne języka C. W tym samouczku założono, że stos gcc na maszynie wirtualnej z systemem Linux platformy Azure z systemem Ubuntu 14.04.
- Microsoft Visual Studio.
- Utwórz przestrzeń nazw usługi Event Hubs i centrum zdarzeń. Użyj witryny Azure Portal, aby utworzyć przestrzeń nazw typu Event Hubs i uzyskać poświadczenia zarządzania, które aplikacja musi komunikować się z centrum zdarzeń. Aby utworzyć przestrzeń nazw i centrum zdarzeń, wykonaj procedurę opisaną w tym artykule. Pobierz wartość klucza dostępu dla centrum zdarzeń, postępując zgodnie z instrukcjami z artykułu: Pobieranie parametry połączenia. W dalszej części tego samouczka użyjesz klucza dostępu w kodzie, który napiszesz w dalszej części tego samouczka. Domyślna nazwa klucza to : RootManageSharedAccessKey.
Pisanie kodu służącego do wysyłania komunikatów do usługi Event Hubs
W tej sekcji pokazano, jak napisać aplikację języka C w celu wysyłania zdarzeń do centrum zdarzeń. Kod korzysta z biblioteki Proton AMQP z projektu Apache Qpid. Jest to analogiczne do używania kolejek i tematów usługi Service Bus z funkcją AMQP z języka C, jak pokazano w tym przykładzie. Aby uzyskać więcej informacji, zobacz dokumentację Qpid Proton.
Na stronie Qpid AMQP Messenger postępuj zgodnie z instrukcjami, aby zainstalować Qpid Proton, w zależności od środowiska.
Aby skompilować bibliotekę Proton, zainstaluj następujące pakiety:
sudo apt-get install build-essential cmake uuid-dev openssl libssl-dev
Pobierz bibliotekę Qpid Proton i wyodrębnij ją, np.:
wget https://archive.apache.org/dist/qpid/proton/0.7/qpid-proton-0.7.tar.gz tar xvfz qpid-proton-0.7.tar.gz
Utwórz katalog kompilacji, skompiluj i zainstaluj:
cd qpid-proton-0.7 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr .. sudo make install
W katalogu służbowym utwórz nowy plik o nazwie sender.c z następującym kodem. Pamiętaj, aby zastąpić wartości klucza/nazwy sygnatury dostępu współdzielonego, nazwy centrum zdarzeń i przestrzeni nazw. Musisz również zastąpić zakodowaną wcześniej wersję klucza zakodowaną pod adresem URL dla utworzonego wcześniej elementu SendRule . W tym miejscu możesz kodować adres URL.
#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; }
Skompiluj plik przy założeniu, że gcc:
gcc sender.c -o sender -lqpid-proton
Uwaga
Ten kod używa okna wychodzącego 1, aby wymusić wyświetlanie komunikatów tak szybko, jak to możliwe. Zaleca się, aby aplikacja próbowała wsadować komunikaty wsadowe w celu zwiększenia przepływności. Zobacz stronę Qpid AMQP Messenger, aby uzyskać informacje na temat korzystania z biblioteki Qpid Proton w tym i innych środowiskach oraz z platform, dla których podano powiązania (obecnie Perl, PHP, Python i Ruby).
Uruchom aplikację, aby wysyłać komunikaty do centrum zdarzeń.
Gratulacje! Wysłano komunikaty do centrum zdarzeń.
Następne kroki
Zapoznaj się z następującymi artykułami: