ETL RabbitMQ in Oracle Data Integrator

Jerod Johnson
Jerod Johnson
Director, Technology Evangelism
This article shows how to transfer RabbitMQ data into a data warehouse using Oracle Data Integrator.

Leverage existing skills by using the JDBC standard to connect to RabbitMQ: Through drop-in integration into ETL tools like Oracle Data Integrator (ODI), the CData JDBC Driver for RabbitMQ connects real-time RabbitMQ data to your data warehouse, business intelligence, and Big Data technologies.

JDBC connectivity enables you to work with RabbitMQ just as you would any other database in ODI. As with an RDBMS, you can use the driver to connect directly to the RabbitMQ APIs in real time instead of working with flat files.

This article covers a JDBC-based ETL -- RabbitMQ to Oracle. After reverse engineering a data model of RabbitMQ entities, you will create a mapping and select a data loading strategy -- since the driver supports SQL-92, this last step can easily be accomplished by selecting the built-in SQL to SQL Loading Knowledge Module.

Install the Driver

To install the driver, copy the driver JAR (cdata.jdbc.api.jar) and .lic file (cdata.jdbc.api.lic), located in the installation folder, into the ODI appropriate directory:

  • UNIX/Linux without Agent: ~/.odi/oracledi/userlib
  • UNIX/Linux with Agent: ~/.odi/oracledi/userlib and $ODI_HOME/odi/agent/lib
  • Windows without Agent: %APPDATA%\Roaming\odi\oracledi\userlib
  • Windows with Agent: %APPDATA%\odi\oracledi\userlib and %APPDATA%\odi\agent\lib

Restart ODI to complete the installation.

Reverse Engineer a Model

Reverse engineering the model retrieves metadata about the driver's relational view of RabbitMQ data. After reverse engineering, you can query real-time RabbitMQ data and create mappings based on RabbitMQ tables.

  1. In ODI, connect to your repository and click New -> Model and Topology Objects.
  2. On the Model screen of the resulting dialog, enter the following information:
    • Name: Enter API.
    • Technology: Select Generic SQL (for ODI Version 12.2+, select Microsoft SQL Server).
    • Logical Schema: Enter API.
    • Context: Select Global.
  3. On the Data Server screen of the resulting dialog, enter the following information:
    • Name: Enter API.
    • Driver List: Select Oracle JDBC Driver.
    • Driver: Enter cdata.jdbc.api.APIDriver
    • URL: Enter the JDBC URL containing the connection string.

      About RabbitMQ Management HTTP API

      RabbitMQ is an open-source message broker that supports multiple messaging protocols. The RabbitMQ Management HTTP API provides HTTP-based access to management and monitoring data for a RabbitMQ server. The API exposes information about virtual hosts, exchanges, queues, bindings, connections, channels, consumers, users, permissions, policies, and cluster-wide statistics.

      The Management plugin must be enabled on the RabbitMQ server for the HTTP API to be available. By default, the management interface listens on port 15672.

      Using Basic Authentication

      RabbitMQ Management HTTP API uses HTTP Basic authentication. You must supply the username and password of a RabbitMQ management user.

      To enable access to the management API:

      1. Ensure the RabbitMQ Management plugin is enabled on your server (rabbitmq-plugins enable rabbitmq_management).
      2. Use an existing management user or create one with the appropriate management tag (management, policymaker, monitoring, or administrator).
      3. Note the full base URL of your RabbitMQ Management HTTP API (e.g., http://localhost:15672).

      After configuring your RabbitMQ server, set the following connection properties to connect:

      • AuthScheme: Set this to Basic.
      • URL: Set this to the base URL of your RabbitMQ Management HTTP API (e.g., http://localhost:15672).
      • User: Set this to your RabbitMQ management username (e.g., guest).
      • Password: Set this to your RabbitMQ management password.

      Example connection string:

      Profile=C:\profiles\RabbitMQ.apip;AuthScheme=Basic;URL=http://localhost:15672;User=guest;Password=guest;
      

      Available Tables

      The RabbitMQ profile provides access to the following tables:

      • Overview - Cluster-wide statistics and information about the RabbitMQ node
      • Nodes - Information about individual nodes in the RabbitMQ cluster
      • NodeMemory - Detailed memory usage breakdown for a specific cluster node
      • Connections - List of all open AMQP connections to the broker
      • Channels - List of all open AMQP channels across all connections
      • Consumers - List of all consumers registered across all queues
      • Exchanges - List of exchanges declared across all virtual hosts
      • Queues - List of queues declared across all virtual hosts
      • Bindings - List of all bindings between exchanges and queues
      • VirtualHosts - List of virtual hosts configured on the broker
      • VhostPermissions - User permissions within a specific virtual host
      • Users - List of all RabbitMQ users
      • Permissions - Permission records for all users across all virtual hosts
      • TopicPermissions - Topic-level permission records for all users
      • Policies - List of policies applied to queues and exchanges in virtual hosts
      • OperatorPolicies - List of operator policies applied to queues in virtual hosts
      • Parameters - List of component parameters (e.g., federation, shovel) per virtual host
      • GlobalParameters - List of global parameters that apply across all virtual hosts
      • VhostLimits - Resource limits configured for specific virtual hosts
      • UserLimits - Resource limits configured for specific users
      • FeatureFlags - List of feature flags and their enabled/disabled state on the node
      • DeprecatedFeatures - List of deprecated features and their usage state
      • AuthAttempts - Authentication attempt statistics for the node
      • ClusterName - The name of the RabbitMQ cluster
      • WhoAmI - Information about the currently authenticated management user
      • ExchangeBindingsSource - Bindings for which a specific exchange is the source
      • ExchangeBindingsDestination - Bindings for which a specific exchange is the destination
      • QueueBindings - Bindings for a specific queue within a virtual host

      Built-in Connection String Designer

      For assistance in constructing the JDBC URL, use the connection string designer built into the RabbitMQ JDBC Driver. Either double-click the JAR file or execute the jar file from the command-line.

      java -jar cdata.jdbc.api.jar
      

      Fill in the connection properties and copy the connection string to the clipboard.

      Below is a typical connection string:

      jdbc:api:Profile=C:\profiles\\RabbitMQ.apip;AuthScheme=Basic;URL=http://localhost:15672;User=guest;Password=guest;
      
  4. On the Physical Schema screen, enter the following information:
    • Name: Select from the Drop Down menu.
    • Database (Catalog): Enter CData.
    • Owner (Schema): If you select a Schema for RabbitMQ, enter the Schema selected, otherwise enter API.
    • Database (Work Catalog): Enter CData.
    • Owner (Work Schema): If you select a Schema for RabbitMQ, enter the Schema selected, otherwise enter API.
  5. In the opened model click Reverse Engineer to retrieve the metadata for RabbitMQ tables.

Edit and Save RabbitMQ Data

After reverse engineering you can now work with RabbitMQ data in ODI. To view RabbitMQ data, expand the Models accordion in the Designer navigator, right-click a table, and click View data.

Create an ETL Project

Follow the steps below to create an ETL from RabbitMQ. You will load AuthAttempts entities into the sample data warehouse included in the ODI Getting Started VM.

  1. Open SQL Developer and connect to your Oracle database. Right-click the node for your database in the Connections pane and click new SQL Worksheet.

    Alternatively you can use SQLPlus. From a command prompt enter the following:

    sqlplus / as sysdba
    
  2. Enter the following query to create a new target table in the sample data warehouse, which is in the ODI_DEMO schema. The following query defines a few columns that match the AuthAttempts table in RabbitMQ:
    CREATE TABLE ODI_DEMO.TRG_AUTHATTEMPTS ( NUMBER(20,0), VARCHAR2(255));
    
  3. In ODI expand the Models accordion in the Designer navigator and double-click the Sales Administration node in the ODI_DEMO folder. The model is opened in the Model Editor.
  4. Click Reverse Engineer. The TRG_AUTHATTEMPTS table is added to the model.
  5. Right-click the Mappings node in your project and click New Mapping. Enter a name for the mapping and clear the Create Empty Dataset option. The Mapping Editor is displayed.
  6. Drag the TRG_AUTHATTEMPTS table from the Sales Administration model onto the mapping.
  7. Drag the AuthAttempts table from the RabbitMQ model onto the mapping.
  8. Click the source connector point and drag to the target connector point. The Attribute Matching dialog is displayed. For this example, use the default options. The target expressions are then displayed in the properties for the target columns.
  9. Open the Physical tab of the Mapping Editor and click AUTHATTEMPTS_AP in TARGET_GROUP.
  10. In the AUTHATTEMPTS_AP properties, select LKM SQL to SQL (Built-In) on the Loading Knowledge Module tab.

You can then run the mapping to load RabbitMQ data into Oracle.

Ready to get started?

Connect to live data from RabbitMQ with the API Driver

Connect to RabbitMQ