.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0

.. _dmaap-connection-objects:

DMaaP connection objects
========================

DMaaP Connection objects are generated by the DCAE Platform at runtime 
and passed to the component in its application_configuration

.. _dmaap-message-router:

Message Router
--------------

Publishers and subscribers have the same generated
``Dmaap Connection Object`` structure. Here’s an example for any given
config-key: (This is what will be in application_configuration)

.. code:: json

    {
        "type": "message_router",
        "aaf_username": "some-user",
        "aaf_password": "some-password",
        "dmaap_info": {
            "client_role": "com.dcae.member",
            "client_id": "1500462518108",
            "location": "mtc00",
            "topic_url": "https://we-are-message-router.us:3905/events/some-topic"
        }
    }

At the top-level:

+--------------------------------+---------+---------------------------+
| Property Name                  | Type    | Description               |
+================================+=========+===========================+
| type                           | string  | *Required as input*. Must |
|                                |         | be ``message_router`` for |
|                                |         | message router topics     |
+--------------------------------+---------+---------------------------+
| aaf_username                   | string  | AAF username message      |
|                                |         | router clients use to     |
|                                |         | authenticate with secure  |
|                                |         | topics                    |
+--------------------------------+---------+---------------------------+
| aaf_password                   | string  | AAF password message      |
|                                |         | router clients use to     |
|                                |         | authenticate with secure  |
|                                |         | topics                    |
+--------------------------------+---------+---------------------------+
| dmaap_info                     | JSON    | *Required as input*.      |
|                                | object  | Contains the topic        |
|                                |         | connection details        |
+--------------------------------+---------+---------------------------+

The ``dmaap_info`` object contains:

+--------------------------------+---------+---------------------------+
| Property Name                  | Type    | Description               |
+================================+=========+===========================+
| client_role                    | string  | AAF client role that’s    |
|                                |         | requesting publish or     |
|                                |         | subscribe access to the   |
|                                |         | topic                     |
+--------------------------------+---------+---------------------------+
| client_id                      | string  | Client id for given AAF   |
|                                |         | client                    |
+--------------------------------+---------+---------------------------+
| location                       | string  | DCAE location for the     |
|                                |         | publisher or subscriber,  |
|                                |         | used to set up routing    |
+--------------------------------+---------+---------------------------+
| topic_url                      | string  | *Required as input*. URL  |
|                                |         | for accessing the topic   |
|                                |         | to publish or receive     |
|                                |         | events                    |
+--------------------------------+---------+---------------------------+



.. _dmaap-data-router:

Data Router
-----------

Publisher
~~~~~~~~~

Here’s an example of what the generated ``Dmaap Connection Object`` for
Data Router Publisher looks like: (This is what will be in
application_configuration)

.. code:: json

    {
        "type": "data_router",
        "dmaap_info": {
            "location": "mtc00",
            "publish_url": "https://we-are-data-router.us/feed/xyz",
            "log_url": "https://we-are-data-router.us/feed/xyz/logs",
            "username": "some-user",
            "password": "some-password",
            "publisher_id": "123456"
        } 
    }

At the top-level:

+--------------------------------+---------+---------------------------+
| Property Name                  | Type    | Description               |
+================================+=========+===========================+
| type                           | string  | *Required as input*. Must |
|                                |         | be ``data_router`` for    |
|                                |         | data router feeds         |
+--------------------------------+---------+---------------------------+
| dmaap_info                     | JSON    | *Required as input*.      |
|                                | object  | Contains the feed         |
|                                |         | connection details        |
+--------------------------------+---------+---------------------------+

The ``dmaap_info`` object contains:

+--------------------------------+---------+---------------------------+
| Property Name                  | Type    | Description               |
+================================+=========+===========================+
| location                       | string  | DCAE location for the     |
|                                |         | publisher, used to set up |
|                                |         | routing                   |
+--------------------------------+---------+---------------------------+
| publish_url                    | string  | *Required as input*. URL  |
|                                |         | to which the publisher    |
|                                |         | makes Data Router publish |
|                                |         | requests                  |
+--------------------------------+---------+---------------------------+
| log_url                        | string  | URL from which log data   |
|                                |         | for the feed can be       |
|                                |         | obtained                  |
+--------------------------------+---------+---------------------------+
| username                       | string  | Username the publisher    |
|                                |         | uses to authenticate to   |
|                                |         | Data Router               |
+--------------------------------+---------+---------------------------+
| password                       | string  | Password the publisher    |
|                                |         | uses to authenticate to   |
|                                |         | Data Router               |
+--------------------------------+---------+---------------------------+
| publisher_id                   | string  | Publisher id in Data      |
|                                |         | Router                    |
+--------------------------------+---------+---------------------------+


Subscriber
~~~~~~~~~~

Here’s an example of what the generated ``Dmaap Connection Object`` for
a Data Router Subscriber looks like: (This is what will be passed in
application_configuration)

.. code:: json

    {
        "type": "data_router",
        "dmaap_info": {
            "location": "mtc00",
            "delivery_url": "https://my-subscriber-app.dcae:8080/target-path",
            "username": "some-user",
            "password": "some-password",
            "subscriber_id": "789012"
        } 
    }

At the top-level:

+--------------------------------+---------+---------------------------+
| Property Name                  | Type    | Description               |
+================================+=========+===========================+
| type                           | string  | *Required as input*. Must |
|                                |         | be ``data_router`` for    |
|                                |         | data router feeds         |
+--------------------------------+---------+---------------------------+
| dmaap_info                     | JSON    | *Required as input*.      |
|                                | object  | Contains the feed         |
|                                |         | connection details        |
+--------------------------------+---------+---------------------------+

The ``dmaap_info`` object contains:

+--------------------------------+---------+---------------------------+
| Property Name                  | Type    | Description               |
+================================+=========+===========================+
| location                       | string  | DCAE location for the     |
|                                |         | subscriber, used to set   |
|                                |         | up routing                |
+--------------------------------+---------+---------------------------+
| delivery_url                   | string  | URL to which the Data     |
|                                |         | Router should deliver     |
|                                |         | files                     |
+--------------------------------+---------+---------------------------+
| username                       | string  | Username Data Router uses |
|                                |         | to authenticate to the    |
|                                |         | subscriber when           |
|                                |         | delivering files          |
+--------------------------------+---------+---------------------------+
| password                       | string  | Password Data Router uses |
|                                |         | to authenticate to the    |
|                                |         | subscriber when           |
|                                |         | delivering files          |
+--------------------------------+---------+---------------------------+
| subscriber_id                  | string  | Subscriber id in Data     |
|                                |         | Router                    |
+--------------------------------+---------+---------------------------+




