Aracılığıyla paylaş


Hızlı Başlangıç: C kullanarak Azure Event Hubs'a olay gönderme

Giriş

Azure Event Hubs saniyede milyonlarca olay alıp işleme kapasitesine sahip olan bir Büyük Veri akış platformu ve olay alma hizmetidir. Event Hubs dağıtılan yazılımlar ve cihazlar tarafından oluşturulan olayları, verileri ve telemetrileri işleyebilir ve depolayabilir. Bir olay hub’ına gönderilen veriler, herhangi bir gerçek zamanlı analiz sağlayıcısı ve işlem grubu oluşturma/depolama bağdaştırıcıları kullanılarak dönüştürülüp depolanabilir. Event Hubs’a ayrıntılı bir genel bakış için bkz. Event Hubs'a genel bakış ve Event Hubs özellikleri.

Bu öğreticide, C'de bir konsol uygulaması kullanarak olay hub'ına olay gönderme açıklanmaktadır.

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdakiler gerekir:

Event Hubs'a ileti göndermek için kod yazma

Bu bölümde, olay hub'ınıza olay göndermek için C uygulaması yazma işlemi gösterilmektedir. Kod, Apache Qpid projesinden Proton AMQP kitaplığını kullanır. Bu, bu örnekte gösterildiği gibi C'den AMQP ile Service Bus kuyruklarını ve konularını kullanmaya benzer. Daha fazla bilgi için Qpid Proton belgelerine bakın.

  1. Qpid AMQP Messenger sayfasında, ortamınıza bağlı olarak Qpid Proton'u yüklemek için yönergeleri izleyin.

  2. Proton kitaplığını derlemek için aşağıdaki paketleri yükleyin:

    sudo apt-get install build-essential cmake uuid-dev openssl libssl-dev
    
  3. Qpid Proton kitaplığını indirin ve ayıklayın, örneğin:

    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. Derleme dizini oluşturma, derleme ve yükleme:

    cd qpid-proton-0.7
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=/usr ..
    sudo make install
    
  5. İş dizininizde aşağıdaki kodla sender.c adlı yeni bir dosya oluşturun. SAS anahtarınızın/adınızın, olay hub'ınızın ve ad alanınızın değerlerini değiştirmeyi unutmayın. Daha önce oluşturulan SendRule için anahtarın URL ile kodlanmış bir sürümünü de değiştirmelisiniz. Burada URL ile kodlayabilirsiniz.

    #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. gcc'yi varsayarak dosyayı derleyin:

    gcc sender.c -o sender -lqpid-proton
    

    Not

    Bu kod, iletileri mümkün olan en kısa sürede dışarı çıkarmak için 1 giden penceresini kullanır. Uygulamanızın aktarım hızını artırmak için iletileri toplu olarak işlemeye çalışması önerilir. Bu ve diğer ortamlarda ve bağlamaların sağlandığı platformlardan (şu anda Perl, PHP, Python ve Ruby) Qpid Proton kitaplığının nasıl kullanılacağı hakkında bilgi için Qpid AMQP Messenger sayfasına bakın.

Olay hub'ına ileti göndermek için uygulamayı çalıştırın.

Tebrikler! Bir olay hub'ına ileti gönderdiniz.

Sonraki adımlar

Aşağıdaki makaleleri okuyun: