Hızlı Başlangıç: C kullanarak olayları Azure Event Hubs 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. Olay Hub’larının ayrıntılı genel bakışı için bkz. Olay Hub’larına genel bakış ve Olay Hub’ları özellikleri.

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

Önkoşullar

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

  • C geliştirme ortamı. Bu öğreticide Ubuntu 14.04 yüklü bir Azure Linux VM'sinde gcc yığını varsayılır.
  • Visual Studio'yu Microsoft.
  • Event Hubs ad alanı ve olay hub'ı oluşturun. Event Hubs türünde bir ad alanı oluşturmak ve uygulamanızın olay hub'ı ile iletişim kurmak için ihtiyaç duyduğu yönetim kimlik bilgilerini almak için Azure portal kullanın. Ad alanı ve olay hub'ı oluşturmak için bu makaledeki yordamı izleyin. Şu makaledeki yönergeleri izleyerek olay hub'ının erişim anahtarının değerini alın: Bağlantı dizesini alma. Bu öğreticinin ilerleyen bölümlerinde yazdığınız kodda erişim anahtarını kullanırsınız. Varsayılan anahtar adı: RootManageSharedAccessKey.

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

Bu bölümde, olay hub'ınıza olay göndermek için bir 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şturun, derleyin ve yükleyin:

    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/adınız, olay hub'ı adınız ve ad alanınızın değerlerini değiştirmeyi unutmayın. Ayrıca, daha önce oluşturulan SendRule için anahtarın URL ile kodlanmış bir sürümünü de değiştirmelisiniz. 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>
    
    #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'yi varsayarak dosyayı derleyin:

    gcc sender.c -o sender -lqpid-proton
    

    Not

    Bu kod, iletileri en kısa sürede dışarı çıkmaya zorlamak için 1 giden penceresini kullanır. Uygulamanızın aktarım hızını artırmak için toplu ileti göndermeye ç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: