WebSocket Client
The WebSocket Client source reads data from a WebSocket server endpoint. Use the source to read data from a WebSocket resource URL. The source can also send responses back to the source system when used in a microservice flow. For information about supported versions, see Supported systems and versions.
When the flow starts, the WebSocket Client source opens a connection to the WebSocket server endpoint and optionally sends an initial message to the server. The WebSocket server then pushes data to the WebSocket Client source. The source creates and sends a batch as soon as the data arrives. The size of each batch varies, based on the size of the data sent by the server endpoint. When the flow stops, the source notes where it stops reading and closes the connection to the endpoint.
When the flow starts again, the WebSocket Client source continues processing from where it stopped by default. You can reset the offset to process all requested data.
When you configure the WebSocket Client source, you define the resource URL and headers to use for the requests. You configure whether the source uses no authentication or basic authentication to connect to the WebSocket server endpoint.
When you want the source to send responses back to the source system as part of a microservice flow, you configure the data format and other characteristics of the responses.
You can also configure SSL/TLS properties, including default transport protocols and cipher suites.
Read REST response data from Data Collector
You can use the WebSocket Client source to read REST response JSON data generated by Data Collector.
Data Collector can serve as a WebSocket server endpoint, as a WebSocket server is simply a TCP application listening on any port of a server that follows a specific protocol.
For example, let's say that your Data Collector runs twenty flows and you want to receive an email when any flow state changes to Run_Error. Instead of configuring email notifications for all twenty flows, you'd like to configure a single global email notification for all of the running flows.
- Add a WebSocket Client source and configure the source to read from the
following resource
URL:
ws://<Data Collector host>:<Data Collector port>/rest/v1/webSocket?type=status - Configure the source to use basic authentication, and then enter a valid Data Collector user name and password on the Credentials tab.
- On the Data Format tab, configure the source to process the JSON data format.
- Add an Email executor to the canvas and connect it to the source.
- On the Email tab of the executor, enter the following
condition so that the executor sends an email only when a flow state changes
to
Run_Error:
${record:value('/status') == 'RUN_ERROR'} - Configure the email IDs, subject, and body for the executor.
For more details about configuring the executor, see Email Executor. Before you run a flow that includes the Email executor, you must enable Data Collector to send email.
Generated microservice responses
In a microservice flow, the WebSocket Client source can send a response back to the originating WebSocket server.
- Records received from microservice targets
- Flow error records received when the flow is configured to use the Send Response to Source flow error handling
The source generates a single response for each batch of records received. The source can generate the response in JSON or XML format. The response can include an envelope or only raw data.
Responses with an envelope
| Response Key or Element | Value |
|---|---|
| httpStatusCode | The status code associated with the records in the
response. If the records in the generated response share the same status code, the code is written to the httpStatusCode key or element. If the records have different status codes, the httpStatusCode is set to 207 for multiple statuses. |
| data | A list of records passed to the source by the microservice targets used in the flow. |
| error | A list of flow error records passed to the source by the Send Response to Source flow error handling. |
| errorMessage | The error message associated with the first error
record in the response. Used only when the response includes error records. |
{
"httpStatusCode":<status code>,
"data":[<list of success records>],
"error":[<list of error records>],
"errorMessage": <error message, if any>
}Raw responses
When configured to send a raw response, the source generates a response that contains either the list of records passed from the microservice targets or the list of error records passed by the Send Response to Source flow error handling. If the source receives data records from targets and error records from the flow, then the source includes only the error records in the response. If the source receives no data records from targets and no error records from the flow, then the source generates an empty response.
Sample responses
- Single record
- The source receives a single record from the Send Response to Source
target. The target is configured to use the 200 status code.For a response with an envelope, the source sends the following response:
{ "httpStatusCode":200, "data":[{"ID":"103","NAME":"Jack","AGE":"37","STATE":"MD"}], "error":[], "errorMessage":null }For a raw response, the source sends the following response:{"ID":"103","NAME":"Jack","AGE":"37","STATE":"MD"} - Multiple data and error records
- The source receives several records, data and error. Because each record has
a different status code, the response uses status code 207 for multiple
statuses. The errorMessage key includes the error associated with the first
record which has a missing ID. The source is configured to present multiple
records as multiple JSON objects.For a response with an envelope, the source sends the following response:
{ "httpStatusCode":207, "data":[{"ID":"248","NAME":"Pina","AGE":"24","STATE":"RI"}], "error":[{"NAME":"Liz","AGE":"37","STATE":"DE"}, {"ID":"302","NAME":"Roco","AGE":"","STATE":"CA"}], "errorMessage":"COMMON_0001 - Stage precondition: CONTAINER_0051 - Unsatisfied precondition(s) '${record:exists('/ID')}'" }For a raw response, the source sends the following response:{"NAME":"Liz","AGE":"37","STATE":"DE"}, {"ID":"302","NAME":"Roco","AGE":"","STATE":"CA"}
Data formats
The WebSocket Client source processes data differently based on the data format that you select.
The WebSocket Client source processes data formats as follows:
- Binary
- Generates a record with a single byte array field at the root of the record.
- Datagram
- Generates a record for every message. The source can process collectd messages, NetFlow 5 and NetFlow 9 messages, and the following types of syslog messages:
- Delimited
- Generates a record for each delimited line.
- JSON
- Generates a record for each JSON object. You can process JSON files that include multiple JSON objects or a single JSON array.
- Log
- Generates a record for every log line.
- Protobuf
- Generates a record for every protobuf message. By default, the source assumes messages contain multiple protobuf messages.
- SDC Record
- Generates a record for every record. Use to process records generated by a Data Collector flow using the SDC Record data format.
- Text
- Generates a record for each line of text or for each section of text based on a custom delimiter.
- XML
- Generates records based on a user-defined delimiter element. Use an XML element directly under the root element or define a simplified XPath expression. If you do not define a delimiter element, the source treats the XML file as a single record.
Configuring a WebSocket Client source
About this task
Configure a WebSocket Client source to read data from a WebSocket server endpoint.