Rövid útmutató: Események küldése az Azure Event Hubsba c használatával

Bevezetés

Az Azure Event Hubs egy Big Data streamplatform és eseményfeldolgozó szolgáltatás, amely másodpercenként több millió esemény fogadására és feldolgozására képes. Az Event Hubs képes az elosztott szoftverek és eszközök által generált események, adatok vagy telemetria feldolgozására és tárolására. Az eseményközpontokba elküldött adatok bármilyen valós idejű elemzési szolgáltató vagy kötegelési/tárolóadapter segítségével átalakíthatók és tárolhatók. Az Event Hubs részletes áttekintéséért lásd az Event Hubs áttekintését és az Event Hubs-szolgáltatásokat ismertető cikket.

Ez az oktatóanyag azt ismerteti, hogyan küldhet eseményeket egy eseményközpontba egy C-ben lévő konzolalkalmazás használatával.

Előfeltételek

Az oktatóanyag teljesítéséhez a következőkre lesz szüksége:

  • C fejlesztési környezet. Ez az oktatóanyag feltételezi, hogy az Ubuntu 14.04-et futtató Azure Linux rendszerű virtuális gépeken a gcc verem.
  • Microsoft Visual Studio.
  • Hozzon létre egy Event Hubs-névteret és egy eseményközpontot. Az Azure Portal használatával hozzon létre egy Event Hubs típusú névteret, és szerezze be az alkalmazás által az eseményközponttal való kommunikációhoz szükséges felügyeleti hitelesítő adatokat. Névtér és eseményközpont létrehozásához kövesse az ebben a cikkben ismertetett eljárást. Az eseményközpont hozzáférési kulcsának értékét a következő cikk utasításai szerint szerezheti be: Kapcsolati sztring lekérése. Az oktatóanyag későbbi részében írt kódban használja a hozzáférési kulcsot. Az alapértelmezett kulcsnév: RootManageSharedAccessKey.

Üzenetküldési kód írása az Event Hubsba

Ebben a szakaszban azt mutatjuk be, hogyan írhat C-alkalmazásokat eseményeket az eseményközpontba. A kód az Apache Qpid-projektBől származó Proton AMQP-kódtárat használja. Ez hasonló a Service Bus-üzenetsorok és témakörök C-ből származó AMQP-vel való használatához, ahogyan az ebben a példában látható. További információkért tekintse meg a Qpid Proton dokumentációját.

  1. A Qpid AMQP Messenger oldalán kövesse az utasításokat a Qpid Proton telepítéséhez a környezetétől függően.

  2. A Proton-kódtár fordításához telepítse a következő csomagokat:

    sudo apt-get install build-essential cmake uuid-dev openssl libssl-dev
    
  3. Töltse le a Qpid Proton könyvtárat, és bontsa ki, például:

    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. Buildkönyvtár létrehozása, fordítása és telepítése:

    cd qpid-proton-0.7
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=/usr ..
    sudo make install
    
  5. A munkahelyi címtárban hozzon létre egy sender.c nevű új fájlt az alábbi kóddal. Ne felejtse el lecserélni az SAS-kulcs/név, az eseményközpont neve és a névtér értékeit. A korábban létrehozott SendRule kulcsának URL-kódolt verzióját is be kell cserélnie. Az URL-címet itt kódolhatja.

    #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. Állítsa össze a fájlt, feltéve, hogy a titkos másolat:

    gcc sender.c -o sender -lqpid-proton
    

    Feljegyzés

    Ez a kód egy 1-ből álló kimenő ablakkal kényszeríti ki az üzeneteket a lehető leghamarabb. Javasoljuk, hogy az alkalmazás próbáljon meg üzeneteket kötegelni az átviteli sebesség növelése érdekében. A Qpid AMQP Messenger oldalán tájékozódhat a Qpid Proton könyvtár ezen és más környezetekben való használatáról, valamint azokról a platformokról, amelyekhez kötéseket biztosítanak (jelenleg Perl, PHP, Python és Ruby).

Futtassa az alkalmazást az üzenetküldéshez az eseményközpontba.

Gratulálunk! Üzeneteket küldött egy eseményközpontba.

Következő lépések

Olvassa el az alábbi cikkeket: