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.

  1. Na stronie Qpid AMQP Messenger postępuj zgodnie z instrukcjami, aby zainstalować Qpid Proton, w zależności od środowiska.

  2. Aby skompilować bibliotekę Proton, zainstaluj następujące pakiety:

    sudo apt-get install build-essential cmake uuid-dev openssl libssl-dev
    
  3. 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
    
  4. Utwórz katalog kompilacji, skompiluj i zainstaluj:

    cd qpid-proton-0.7
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=/usr ..
    sudo make install
    
  5. 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;
    }
    
  6. 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: