0.9.8 • Published 3 years ago

@sap/xb-msg-env v0.9.8

Weekly downloads
65
License
SEE LICENSE IN de...
Repository
-
Last release
3 years ago

xb-msg-env

Provides functions to setup messaging client options from CF (or XSA) environment variables.

The following clients are supported:

  • @sap/xb-msg, protocol-agnostic API, multiple destinations per single client
  • @sap/xb-msg-amqp-v100, protocol-specific, single connection per client
  • @sap/xb-msg-amqp-v091, protocol-specific, single connection per client
  • @sap/xb-msg-mqtt-v311, protocol-specific, single connection per client.

The following environment variables are used:

  • VCAP_SERVICES with bindings to RabbitMQ or Enterprise Messaging,
  • SAP_XBEM_SERVICE_LABEL to use an alternative service label for Enterprise Messaging,
  • SAP_XBEM_BINDINGS to define incoming and/or outgoing message streams.

Table of contents

Install

See also: https://www.npmjs.com/package/@sap/xb-msg-env

To add it to your project run:

npm i @sap/xb-msg-env

To generate complete API documentation run inside the library package folder

npm run doc

API

Environment Variables

The following parameters exist in the SAP_XBEM_BINDINGS environment variable. SAP_XBEM_BINDINGS contains an input and an output map.

"SAP_XBEM_BINDINGS": {
    "outputs": {
    },
    "inputs": {
    }
}

A single input or output can have the following properties:

ParameterTypeInputOutputDescription
servicestringyesyesName of the messaging service to which this item is assigned
addressstringyesyesQueue name (e.g. queue:q001) or topic in unified syntax (e.g. topic:BO/Sales/Order/Released)
reliablebooleanyesyesIndicates whether acknowledgements are used for reliable message transfers
exclusivebooleanyesnoIndicates whether only one single consumer is allowed at a time
persistentbooleannoyesIndicates whether the message broker persists messages
maxMsgInFlightnumberyesnoThe maximum number of unacknowledged messages the broker sends to the consumer

Create xb-msg Client Options

Create a messaging client and start consuming messages.

const msg = require('@sap/xb-msg');
const env = require('@sap/xb-msg-env');

/* get options from cf/xsa environment */
const options = env.msgClientOptions('msg-instance-01', ['MyInpA'], []);

/* start messaging */
const client = new msg.Client(options);

client.istream('MyInpA')
    .on('subscribed', () => {
        console.log('subscribed');
    })
    .on('data', (message) => {
        console.log('message: ' + message.payload.toString());
        message.done();
    });

client.connect();

Create xb-msg-amqp-v100 Client Options without SAP_XBEM_BINDINGS

Create an AMQP 1.0 messaging client and start consuming messages, receiving each at-least-once.

const msg = require('@sap/xb-msg-amqp-v100');
const env = require('@sap/xb-msg-env');

/* get options from cf/xsa environment */
const options = env.amqpV100ClientOptions('my-service');

/* start messaging */
const client = new msg.Client(options);
const stream = client.receiver('MyLinkA').attach('MyQueue1');

stream
    .on('subscribed', () => {
        console.log('subscribed');
    })
    .on('data', (message) => {
        console.log('message: ' + message.payload.toString());
        message.done();
    });

client.connect();

Create xb-msg-amqp-v091 Client Options

Create an AMQP v091 messaging client and start consuming messages.

const msg = require('@sap/xb-msg-amqp-v091');
const env = require('@sap/xb-msg-env');

/* get options from cf/xsa environment */
const options = env.amqpV091ClientOptions('msg-instance-02', ['MyInpB'], []);

/* start messaging */
const client = new msg.Client(options);

client.channel(1)
    .on('opened', () => {
        console.log('opened');
    })
    .on('flow', (active) => {
        console.log(active ? 'continue' : 'wait');
    })
    .on('closed', (hadError) => {
        console.log('closed');
        client.disconnect();
    });

client.istream('MyInpB')
    .on('subscribed', () => {
        console.log('subscribed');
    })
    .on('data', (message) => {
        console.log('message: ' + message.payload.toString());
        message.done();
    });

client.connect();

Create xb-msg-mqtt-v311 Client Options

Create an MQTT v311 messaging client and start consuming messages.

const msg = require('@sap/xb-msg-mqtt-v311');
const env = require('@sap/xb-msg-env');

/* get options from cf/xsa environment */
const options = env.mqttV311ClientOptions('msg-instance-03', ['MyInpC'], []);

/* start messaging */
const client = new msg.Client(options);

client.istream('MyInpC')
    .on('subscribed', () => {
        console.log('subscribed');
    })
    .on('data', (message) => {
        console.log('message: ' + message.payload.toString());
        message.done();
    });

client.connect();

Examples

Below is an example of 'Environment Variables'. There is one Rabbit MQ instance named 'myService'. The messaging service inputs and outputs are maintained via another environment variable named SAP_XBEM_BINDINGS. Here, one output name 'myOutA' is defined.

{
  "VCAP_SERVICES": {
    "rabbitmq": [
        {
            "credentials": {
                "hostname": "10.11.11.11",
                "ports": {
                    "15672/tcp": "8888",
                    "5672/tcp": "9999"
                },
                "port": "9999",
                "username": "user",
                "password": "pwd",
                "uri": "amqp://user:pwd@10.11.11.11:9999"
            },
            "syslog_drain_url": null,
            "volume_mounts": [],
            "label": "rabbitmq",
            "provider": null,
            "plan": "v3.6-container",
            "name": "myService",
            "tags": [
                "rabbitmq",
                "mbus",
                "pubsub",
                "amqp"
            ]
        }
    ]
  },
  "SAP_XBEM_BINDINGS": {
    "outputs": {
      "myOutA" : {
        "service": "myService",
        "address": "topic:Cars/Velocity/milesPerHour",
        "reliable": false
      }
    }
  }
}

The following call:

const env = require('@sap/xb-msg-env');
const opt = env.msgClientOptions('myService', [], ['myOutA']);

will provide the client options for @sap/xb-msg:

{
  "destinations": [
    {
      "name": "myService",
      "type": "amqp-v091",
      "net": {
        "host": "10.11.11.11",
        "port": 9999
      },
      "sasl": {
        "user": "user",
        "password": "pwd"
      },
      "amqp": {
        "vhost": "/"
      },
      "istreams": {
      },
      "ostreams": {
        "out": { 
          "channel": 1, 
          "exchange": "amq.topic", 
          "routingKey": "Cars.Velocity.milesPerHour",
          "confirms": false 
        }
      }
    }
  ]
}
0.9.8

3 years ago

0.9.7

3 years ago

0.9.6

4 years ago

0.1.6

4 years ago

0.9.0

4 years ago

0.9.4

4 years ago

0.1.7

4 years ago

0.2.1

4 years ago

0.1.1

4 years ago

0.1.2

4 years ago