Tutorial: Basic Produce Example

Basic Produce Example

This sample demonstrates how to produce records to the DXL streaming service.


  • A DXL streaming service is available for the sample to connect to.
  • Credentials for the service available for use with the sample.


Modify the example to include the appropriate settings for the streaming service channel:

// Change these below to match the appropriate details for your
// channel connection.
var CHANNEL_URL = ''
var CHANNEL_PASSWORD = 'secret'
var CHANNEL_TOPIC = 'my-topic'
// Path to a CA bundle file containing certificates of trusted CAs. The CA
// bundle is used to validate that the certificate of the server being connected
// to was signed by a valid authority. If set to an empty string, the server
// certificate is not validated.

For testing purposes, you can use the fake_streaming_service Python tool embedded in the OpenDXL Streaming Client SDK to start up a local streaming service. See the documentation for the Basic Produce Example in the OpenDXL Streaming Client Python SDK for more information on the fake_streaming_service tool. The initial settings in the example above include the URL and credentials used by the fake_streaming_service.

To launch the fake_streaming_service tool, run the following command in a command window:

$ python sample/fake_streaming_service.py

Messages like the following should appear in the command window:

INFO:__main__:Starting service
INFO:__main__:Started service on http://mycaseserver:50080


To run this sample execute the sample/basic/basic-produce-example.js script as follows:

$ node sample/basic/basic-produce-example.js

If the records are successfully produced to the streaming service, the following line should appear in the output window:


To validate that the records were produced to the streaming service with the expected content, you can execute the sample/basic/basic-consume-example.js script as follows:

$ node sample/basic/basic-consume-example.js

One of the records received by the sample should appear similar to the following:

Received payloads: [
        "message": "Hello from OpenDXL"


The majority of the sample code is shown below:

var CHANNEL_TOPIC = 'my-topic'

// Create the message payload to be included in a record
var messagePayload = {
  message: 'Hello from OpenDXL'

// Create the full payload with records to produce to the channel
var channelPayload = {
  records: [
      routingData: {
        topic: CHANNEL_TOPIC,
        shardingKey: ''
      message: {
        headers: {},
        // Convert the message payload from an object to a base64-encoded
        // string.
        payload: Buffer.from(JSON.stringify(messagePayload)).toString('base64')

// Create a new channel object
var channel = new Channel(CHANNEL_URL,
    auth: new ChannelAuth(CHANNEL_URL, CHANNEL_USERNAME,
      CHANNEL_PASSWORD, addTlsOptions())

// Produce the payload records to the channel
  function (error) {
    if (error) {
      console.log('Error : ' + error)
    } else {

The first step is to create a payload object which includes an array of records to be sent to the channel. The message.payload item in each record is flattened from a dictionary into a string and encoded using the base64 algorithm.

The next step is to create a Channel instance, which establishes a channel to the streaming service. The channel parameters include the URL to the streaming service, CHANNEL_URL, and credentials that the client uses to authenticate itself to the service, CHANNEL_USERNAME and CHANNEL_PASSWORD.

The final step is to call the Channel#produce method with the payload of records to be produced to the channel. Assuming the records can be produced successfully, the text "Succeeded." should appear in the console output.