Краткое руководство. Отправка событий в Центры событий Azure с помощью CQuickstart: Send events to Azure Event Hubs using C

ВведениеIntroduction

Центры событий Azure — это платформа потоковой передачи больших данных и служба приема событий, принимающая и обрабатывающая миллионы событий в секунду.Azure Event Hubs is a Big Data streaming platform and event ingestion service, capable of receiving and processing millions of events per second. Центры событий могут обрабатывать и сохранять события, данные и телеметрию, созданные распределенным программным обеспечением и устройствами.Event Hubs can process and store events, data, or telemetry produced by distributed software and devices. Данные, отправляемые в концентратор событий, можно преобразовывать и сохранять с помощью любого поставщика аналитики в реальном времени, а также с помощью адаптеров пакетной обработки или хранения.Data sent to an event hub can be transformed and stored using any real-time analytics provider or batching/storage adapters. Подробный обзор Центров событий см. в статьях Что такое Центры событий Azure? и Обзор функций Центров событий.For detailed overview of Event Hubs, see Event Hubs overview and Event Hubs features.

В этом руководстве описано, как отправлять события в концентратор событий с помощью консольного приложения на языке C.This tutorial describes how to send events to an event hub using a console application in C.

Предварительные требованияPrerequisites

Для работы с этим учебником требуется:To complete this tutorial, you need the following:

  • Среда разработки C.A C development environment. В этом учебнике предполагается, что применяется стек gcc на виртуальной машине Azure Linux с Ubuntu 14.04.This tutorial assumes the gcc stack on an Azure Linux VM with Ubuntu 14.04.
  • Microsoft Visual Studio.Microsoft Visual Studio.
  • Создайте пространство имен Центров событий и концентратор событий.Create an Event Hubs namespace and an event hub. Вы можете использовать портал Azure для создания пространства имен типа Центров событий и получать учетные данные для управления, требуемые приложению для взаимодействия с концентратором событий.Use the Azure portal to create a namespace of type Event Hubs, and obtain the management credentials your application needs to communicate with the event hub. Чтобы создать пространство имен и концентратор событий, выполните инструкции из этой статьи.To create a namespace and an event hub, follow the procedure in this article. Получите значение ключа доступа для концентратора событий, следуя Получение строки подключения на портале.Get the value of access key for the event hub by following instructions from the article: Get connection string. Используйте ключ доступа в коде, который вы напишете далее в рамках этого руководства.You use the access key in the code you write later in this tutorial. Имя ключа по умолчанию: RootManageSharedAccessKey.The default key name is: RootManageSharedAccessKey.

Написание кода для отправки сообщений в Центры событийWrite code to send messages to Event Hubs

Из этого раздела вы узнаете, как написать приложение для отправки событий в концентратор на языке C.In this section shows how to write a C app to send events to your event hub. В коде используется библиотека Proton AMQP из проекта Apache Qpid.The code uses the Proton AMQP library from the Apache Qpid project. Эта процедура аналогична использованию очередей и разделов службы "Служебная шина" с AMQP на C, как показано в этом примере.This is analogous to using Service Bus queues and topics with AMQP from C as shown in this sample. Дополнительную информацию см. в документации по Qpid Proton.For more information, see the Qpid Proton documentation.

  1. Чтобы установить Qpid Proton, следуйте инструкциям для своей среды на странице Qpid AMQP Messenger.From the Qpid AMQP Messenger page, follow the instructions to install Qpid Proton, depending on your environment.

  2. Для компиляции библиотеки Proton установите следующие пакеты.To compile the Proton library, install the following packages:

    sudo apt-get install build-essential cmake uuid-dev openssl libssl-dev
    
  3. Скачайте библиотеку Qpid Proton и извлеките ее, например:Download the Qpid Proton library, and extract it, e.g.:

    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. Создайте каталог построения, скомпилируйте и установите:Create a build directory, compile and install:

    cd qpid-proton-0.7
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=/usr ..
    sudo make install
    
  5. В рабочем каталоге создайте новый файл с именем sender.c со следующим кодом.In your work directory, create a new file called sender.c with the following code. Обязательно замените значения для ключа и имени, имени концентратора событий и пространства имен SAS.Remember to replace the values for your SAS key/name, event hub name, and namespace. Также необходимо заменить версию ключа SendRule , закодированную как URL-адрес, созданную ранее.You must also substitute a URL-encoded version of the key for the SendRule created earlier. Выполнить кодировку как URL-адрес можно здесь.You can URL-encode it here.

    #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>
    
    #define check(messenger)                                                     \
      {                                                                          \
        if(pn_messenger_errno(messenger))                                        \
        {                                                                        \
          printf("check\n");                                                     \
          die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \
        }                                                                        \
      }
    
    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");
    
        pn_messenger_t *messenger = pn_messenger(NULL);
        pn_messenger_set_outgoing_window(messenger, 1);
        pn_messenger_start(messenger);
    
        while(true) {
            sendMessage(messenger);
            printf("Sent message\n");
            sleep(1);
        }
    
        // release messenger resources
        pn_messenger_stop(messenger);
        pn_messenger_free(messenger);
    
        return 0;
    }
    
  6. Скомпилируйте файл при условии gcc:Compile the file, assuming gcc:

    gcc sender.c -o sender -lqpid-proton
    

    Примечание

    В этом коде для периода отправки используется значение 1. Это обеспечивают максимальную скорость принудительной отправки сообщений.This code uses an outgoing window of 1 to force the messages out as soon as possible. Рекомендуем сгруппировать сообщения в приложении, чтобы увеличить пропускную способность.It is recommended that your application try to batch messages to increase throughput. Информацию об использовании библиотеки Qpid Proton в этой и других средах, а также на платформах, для которых предоставляются привязки (сейчас это Perl, PHP, Python и Ruby), см. на странице Qpid AMQP Messenger.See the Qpid AMQP Messenger page for information about how to use the Qpid Proton library in this and other environments, and from platforms for which bindings are provided (currently Perl, PHP, Python, and Ruby).

Запустите приложение для отправки сообщений в концентратор событий.Run the application to send messages to the event hub.

Поздравляем!Congratulations! Теперь вы можете отправлять сообщения в концентратор событий.You have now sent messages to an event hub.

Дополнительная информацияNext steps

Ознакомьтесь со следующими статьями:Read the following articles: