Краткое руководство. Отправка событий в Центры событий Azure с помощью C
Введение
Центры событий Azure — это платформа потоковой передачи больших данных и служба приема событий, принимающая и обрабатывающая миллионы событий в секунду. Центры событий могут обрабатывать и сохранять события, данные и телеметрию, созданные распределенным программным обеспечением и устройствами. Данные, отправляемые в концентратор событий, можно преобразовывать и сохранять с помощью любого поставщика аналитики в реальном времени, а также с помощью адаптеров пакетной обработки или хранения. Подробный обзор Центров событий см. в статьях Что такое Центры событий Azure? и Обзор функций Центров событий.
В этом руководстве описано, как отправлять события в концентратор событий с помощью консольного приложения на языке C.
Необходимые компоненты
Для работы с этим руководством вам нужно следующее:
- Среда разработки C. В этом учебнике предполагается, что применяется стек gcc на виртуальной машине Azure Linux с Ubuntu 14.04.
- Microsoft Visual Studio.
- Создайте пространство имен Центров событий и концентратор событий. Вы можете использовать портал Azure для создания пространства имен типа Центров событий и получать учетные данные для управления, требуемые приложению для взаимодействия с концентратором событий. Чтобы создать пространство имен и концентратор событий, выполните инструкции из этой статьи. Получите значение ключа доступа для концентратора событий, следуя инструкциям в разделе Получение строки подключения на портале. Используйте ключ доступа в коде, который вы напишете далее в рамках этого руководства. По умолчанию для ключа используется имя RootManageSharedAccessKey.
Написание кода для отправки сообщений в Центры событий
Из этого раздела вы узнаете, как написать приложение для отправки событий в концентратор на языке C. В коде используется библиотека Proton AMQP из проекта Apache Qpid. Эта процедура аналогична использованию очередей и разделов службы "Служебная шина" с AMQP на C, как показано в этом примере. Дополнительную информацию см. в документации по Qpid Proton.
Чтобы установить Qpid Proton, следуйте инструкциям для своей среды на странице Qpid AMQP Messenger.
Для компиляции библиотеки Proton установите следующие пакеты.
sudo apt-get install build-essential cmake uuid-dev openssl libssl-dev
Скачайте библиотеку Qpid Proton и извлеките ее, например:
wget https://archive.apache.org/dist/qpid/proton/0.7/qpid-proton-0.7.tar.gz tar xvfz qpid-proton-0.7.tar.gz
Создайте каталог построения, скомпилируйте и установите:
cd qpid-proton-0.7 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr .. sudo make install
В рабочем каталоге создайте новый файл с именем sender.c со следующим кодом. Обязательно замените значения для ключа и имени, имени концентратора событий и пространства имен SAS. Также необходимо заменить версию ключа SendRule , закодированную как URL-адрес, созданную ранее. Выполнить кодировку как 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; }
Скомпилируйте файл при условии gcc:
gcc sender.c -o sender -lqpid-proton
Примечание.
В этом коде для периода отправки используется значение 1. Это обеспечивают максимальную скорость принудительной отправки сообщений. Рекомендуем сгруппировать сообщения в приложении, чтобы увеличить пропускную способность. Информацию об использовании библиотеки Qpid Proton в этой и других средах, а также на платформах, для которых предоставляются привязки (сейчас это Perl, PHP, Python и Ruby), см. на странице Qpid AMQP Messenger.
Запустите приложение для отправки сообщений в концентратор событий.
Поздравляем! Теперь вы можете отправлять сообщения в концентратор событий.
Следующие шаги
Ознакомьтесь со следующими статьями: