Inviare eventi a Hub di eventi di Azure usando CSend events to Azure Event Hubs using C

IntroduzioneIntroduction

Hub eventi è un sistema di inserimento a scalabilità elevata, in grado di inserire milioni di eventi al secondo, che permette a un'applicazione di elaborare e analizzare le elevate quantità di dati prodotti dalle applicazioni e dai dispositivi connessi.Event Hubs is a highly scalable ingestion system that can ingest millions of events per second, enabling an application to process and analyze the massive amounts of data produced by your connected devices and applications. Dopo la raccolta in un hub eventi, è possibile trasformare e archiviare i dati usando qualsiasi provider di analisi in tempo reale o un cluster di archiviazione.Once collected into an event hub, you can transform and store data using any real-time analytics provider or storage cluster.

Per altre informazioni, vedere [Panoramica di Hub eventi][Panoramica di Hub eventi].For more information, please see the [Event Hubs overview][Event Hubs overview].

Questa esercitazione illustra come inviare eventi a un hub eventi usando un'applicazione console in C. Per informazioni su come ricevere gli eventi, fare clic sul linguaggio di ricezione appropriato nel sommario a sinistra.This tutorial describes how to send events to an event hub using a console application in C. To learn about receiving events, click the appropriate receiving language in the left-hand table of contents.

Per completare l'esercitazione, sono necessari gli elementi seguenti:To complete this tutorial, you need the following:

  • Ambiente di sviluppo in C.A C development environment. Questa esercitazione presuppone l'uso di uno stack gcc in una VM Linux di Azure con Ubuntu 14.04.This tutorial assumes the gcc stack on an Azure Linux VM with Ubuntu 14.04.
  • Microsoft Visual Studio.Microsoft Visual Studio.
  • Un account Azure attivo.An active Azure account. Se non si dispone di un account, è possibile creare un account di valutazione gratuita in pochi minuti.If you don't have an account, you can create a free trial account in just a couple of minutes. Per informazioni dettagliate, vedere la pagina relativa alla versione di valutazione gratuita di Azure.For details, see Azure Free Trial.

Inviare messaggi all'hub eventiSend messages to Event Hubs

In questa sezione viene illustrato come scrivere un'app C per inviare eventi all'hub eventi.In this section shows how to write a C app to send events to your event hub. Il codice usa la libreria Proton AMQP dal progetto Apache Qpid.The code uses the Proton AMQP library from the Apache Qpid project. Il procedimento è simile a quello adottato per l'uso di code e argomenti del bus di servizio con AMQP da C, come illustrato in questo esempio.This is analogous to using Service Bus queues and topics with AMQP from C as shown in this sample. Per altre informazioni, vedere la documentazione di Qpid Proton.For more information, see the Qpid Proton documentation.

  1. Dalla pagina di Qpid AMQP Messenger seguire le istruzioni per l'installazione di Qpid Proton a seconda dell'ambiente corrente.From the Qpid AMQP Messenger page, follow the instructions to install Qpid Proton, depending on your environment.
  2. Per compilare la libreria Proton, installare i seguenti pacchetti:To compile the Proton library, install the following packages:

    sudo apt-get install build-essential cmake uuid-dev openssl libssl-dev
    
  3. Scaricare la libreria Qpid Proton e quindi estrarla, ad esempio:Download the Qpid Proton library, and extract it, e.g.:

    wget http://archive.apache.org/dist/qpid/proton/0.7/qpid-proton-0.7.tar.gz
    tar xvfz qpid-proton-0.7.tar.gz
    
  4. Creare una directory di compilazione, compilare e installare: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. Nella directory di lavoro creare un nuovo file denominato sender.c con il codice seguente.In your work directory, create a new file called sender.c with the following code. Ricordare di sostituire i valori per la chiave o il nome della firma di accesso condiviso, il nome dell'hub eventi e lo spazio dei nomi.Remember to replace the values for your SAS key/name, event hub name, and namespace. È anche necessario sostituire una versione codificata con URL della chiave per l'elemento SendRule creato in precedenza.You must also substitute a URL-encoded version of the key for the SendRule created earlier. È possibile creare la versione codificata con URL qui.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. Compilare il file (si presuppone gcc):Compile the file, assuming gcc:

    gcc sender.c -o sender -lqpid-proton
    

    Nota

    Questo codice usa una finestra in uscita pari a 1 per imporre un invio dei messaggi il più rapido possibile.This code uses an outgoing window of 1 to force the messages out as soon as possible. È opportuno che l'applicazione provi a inviare i messaggi in batch per aumentare la velocità effettiva.It is recommended that your application try to batch messages to increase throughput. Vedere la pagina di Qpid AMQP Messenger per informazioni sull'uso della libreria Qpid Proton in questo e in altri ambienti e anche nelle piattaforme per le quali sono disponibili associazioni, al momento Perl, PHP, Python e Ruby.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).

Passaggi successiviNext steps

Per ulteriori informazioni su Hub eventi visitare i collegamenti seguenti:You can learn more about Event Hubs by visiting the following links: