LSEG Messenger - User Message Feed

What is the User Message Feed?

The User Message Feed is a headless Java application that subscribes to LSEG Messenger conversations ( 1-1 chats , Bilateral and Managed group chats) and forwards each message event—enriched with metadata—to your own plugin(s) for processing (e.g., archiving or analytics). You ship a plugin JAR; the feed invokes your handler for every message the tracked user sends/receives.

 

At a glance

  • Runtime: Java 17+
  • Delivery: Single JAR app (message-feed-app) + common handler library (message-feed-handler) + your plugin(s)
  • I/O: JSON message events → your ChatroomMessageHandler implementation(s)
  • Scale: Multiple concurrent sessions per service account; production requires proper license setup (see below)

 

Quickstart (10 minutes)

    You’ll run the feed locally, print messages to console using the example plugin, then swap in your own plugin.

 

1) Check prerequisites

  • Java: Install Java SE 17+ on the host that will run the feed.
  • Licensing: Ensure you have:
    service account with LSEG MESSENGER (Base) and UMF SERVICE ACCOUNT ( ADD-ON), Elektron Delivery.
    The user(s) to monitor licensed with Workspace Messenger (Base) and UMF USER ADD ON, Service & user accounts must be under the same A‑Number.
  • Network: Outbound HTTPS (443) to required domains, including api.refinitiv.com, cdn.refinitiv.com, and Messenger endpoints. If your endpoint security inspects TLS, whitelist Ably’s cert used by the transport.

 

2) Download the artifacts

From the LSEG Developer portal downloads page, get:

  • message-feed-0.0.42.0.zip
  • message-feed-plugins-example.zip (optional, for sample plugin)

Unzip to a working directory; you should see:

    	
            

/message-feed

message-feed-app-x.x.x.jar

message-feed-handler-x.x.x.jar

/plugins

message-feed-plugin-example.jar

Tip: place your own plugin JARs in /plugins.

3) Run the feed

Prepare these JVM system properties:

Required

  • -Dserviceaccount — service account UUID
  • -Dpwd — service account password
  • -DtrackUUID — user UUID to monitor (or use -DtrackEmail for user ID/email)

Optional

  • -Dplugin.dir — custom path to plugin JARs (default: ./plugins)
  • -Denv — prod|qa|trd|beta|dev (default: prod)
  • -Dablyverboselog — true|false (default: false)
  • -Dloglevel — TRACE|DEBUG|INFO|ERROR|FATAL (default: DEBUG)

 

Command

    	
            cd message-feed
java \ 
    -Djava.system.class.loader=com.refinitiv.collab.platform.msgfeed.keep.DecryptClassLoader \
    -jar message-feed-0.0.41.0.jar \
    "-Dserviceaccount=<SERVICE_ACCOUNT_UUID>" \
    "-Dpwd=<SERVICE_ACCOUNT_PASSWORD>" \
    "-DtrackUUID=<USER_UUID_TO_TRACK>"
# or substitute -DtrackEmail=<USER_ID_OR_EMAIL>

If the example plugin is present, message events will print to stdout. Swap in your own plugin JAR(s) to control downstream processing.

 

How plugins work

You provide one or more fat JAR plugins (all dependencies shaded) that implement the ChatroomMessageHandler interface from message-feed-handler-x.x.x.jar. The feed discovers all handlers under /plugins and invokes each one for every incoming message. You can add/update plugin JARs without stopping the app; to remove, stop the app, delete the JAR, and restart.

    Build note: Create a fat JAR with your build tool (e.g., Gradle “shadow” / fat‑jar).

Event payload shape

Handlers receive a JSON string conforming to com.refinitiv.collab.platform.msgfeed.Data.ChatMessageEvent (and MsgFeedChatMessageEvent with additionalData). Abridged structure:

    	
            

@Data

public class ChatMessageEvent {

    protected String eventType; // e.g., "chatroom.message"

    private String traceId;

    private EventData eventData;

    @Data

    public static class EventData {

        private String chatRoomId;

        private String messengerUuid; // sender

        private String userUuid; // tracked user

        private String messageId;

        private String createAt; // ISO timestamp

        private String messageType; // MIME type

        private String message; // text content

        private List<Attachment> attachments;

        private boolean isBot;

        // ...replyTarget, command, urlDetails, messageExtension

    }

}

Example event (truncated):

    	
            

{

  "eventType": "chatroom.message",

  "eventData": {

    "chatRoomId": "blc:3MmgLo...",

    "messengerUuid": "GE-...",

    "userUuid": "GE-...",

    "messageId": "202603090732...",

    "createAt": "2026-03-09T07:32:35.039Z",

    "messageType": "text/plain",

    "message": "Hello World",

    "attachments": [

      {

        "attachmentReference": "5858...",

        "attachmentType": "application/pdf",

        "attachmentName": "MQ_UMF.pdf"

      }

    ]

  },

  "additionalData": {

    "chatRoomName": "BLC FX Options",

    "userId": "peter.martin@lseg.com"

  }

}

Refer to the handler JAR for the authoritative model.

Production checklist

  • Accounts & licenses configured (service + tracked users) under the same A‑Number; service account registered with LSEG.
  • Network egress to required domains over TCP 443; Ably cert whitelisted on hosts that run the feed.
  • Secrets managed via your secret store; pass via JVM -D... flags or environment injection.
  • Observability: set -Dloglevel=INFO (or DEBUG temporarily); capture stdout/stderr; consider sidecar log shipping.
  • Resilience: supervise the process (systemd/Kubernetes), auto‑restart on exit, and schedule regular restarts during maintenance windows to mitigate the known memory leak (see Known issues).

 

Operating the feed

Environments

Use -Denv=prod by default; qa|trd|beta|dev are available for testing.

 

Scaling sessions

You can run multiple sessions under a single service account. Avoid duplicate (service account, tracked user) pairs concurrently; the app will reject with “Session already exists!”.

 

Live plugin changes

You may add or update JARs in /plugins while the app is running; removals require a restart.

 

Known issues & maintenance

  • Planned maintenance windows: Weekend backend maintenance may interrupt sessions; restart affected apps to resume monitoring.
  • Memory leak under sustained load: In endurance tests (8 hours, ~50 msgs/sec across ~50 sessions), memory usage trends upward (though <50% observed). Mitigate by scheduling periodic restarts during low‑traffic windows and monitor heap.
  • Duplicate pair conflict: If another operator runs the same (service account, user) pair, your session will fail to start. Coordinate ownership, or centralize orchestration.

 

API / Handler reference (essentials)

Implement ChatroomMessageHandler

Your plugin JAR must provide at least one implementation of:

    	
            com.refinitiv.collab.platform.msgfeed.handler.ChatroomMessageHandler
        
        
    

Methods and lifecycle callbacks are distributed via the common library message-feed-handler-x.x.x.jar. Place your compiled plugin in /plugins.

Attachments

eventData.attachments[] includes attachmentReference, attachmentType (MIME), and attachmentName. Use these fields to retrieve and process files according to your compliance pipeline.

Security & compliance notes

  • Run the feed on a hardened host within your compliance boundary.
  • Lock down plugin code reviews; the feed executes your JARs with the app’s privileges.
  • Rotate service account credentials; avoid embedding secrets in JARs or scripts.
  • Ensure data retention policies cover message text and any attachments you extract. (See payload model above.)

Troubleshooting

Startup fails with “Session already exists!”

Another session is active for the same service account + user pair. Stop the other session or change the pair.

No messages flowing

Confirm licenses on both accounts, verify the user identifier (-DtrackUUID vs -DtrackEmail), and check egress to required domains over 443.

Verbose transport logs

Enable -Dablyverboselog=true for temporary diagnostics; revert to reduce noise.

Account & license setup (summary)

  • Create a service account in PAA and assign LSEG MESSENGER (Base) + UMF SERVICE ACCOUNT (Add-on) licences.
  • Ensure tracked users have Workspace/LSEG Messenger (Base) + UMF USER ADD-ON. 
  • Keep service & users under the same A‑Number.
  • After creation, register the service account with LSEG.

For detailed, click‑through PAA steps and UI screenshots, refer to your internal admin guides (to be published on the Workspace technical documentation site).

Download links & support

  • Downloads: Developer portal → LSEG Messenger → Downloads → message-feed-0.0.42.0.zip, message-feed-plugins-example.zip.
  • Docs: Workspace technical documentation site.
  • Contact: Reach out to LSEG Support for production registration and assistance.

 

Changelog highlights (from internal v1.16)

  • Consolidated quickstart, explicit env and logging flags
  • Clarified duplicate‑session behavior & weekend maintenance note
  • Added endurance‑test guidance and restart policy recommendation

Appendix: Command reference

    	
            

# Required

-Dserviceaccount=<UUID>

-Dpwd=<PASSWORD>

-DtrackUUID=<USER_UUID> # or -DtrackEmail=<USER_ID_OR_EMAIL>

 

# Optional

echo "Using plugins from" ${PLUGIN_DIR:-./plugins}

-Dplugin.dir=<PATH>

-Denv=prod|qa|trd|beta|dev

-Dablyverboselog=true|false

-Dloglevel=TRACE|DEBUG|INFO|ERROR|FATAL

Place plugin JARs in the configured directory; the app loads all handlers it finds.

Domain whitelisting

To ensure seamless connectivity and functionality of the User Message Feed, the following domains must be accessible from the customer’s infrastructure:

Required domains

Port

  • api.refinitiv.com
  • cdn.refinitiv.com
  • messenger.collaboration.refinitiv.com
  • a-fallback.collaboration.refinitiv.com
  • b-fallback.collaboration.refinitiv.com
  • c-fallback.collaboration.refinitiv.com
  • d-fallback.collaboration.refinitiv.com
  • e-fallback.collaboration.refinitiv.com

TCP 443 (https)

Configure UMD for proxy connection

Add the proxy parameters to your launch command.

Basic proxy (no authentication):

    	
            

 

java "-Djava.system.class.loader=com.refinitiv.collab.platform.msgfeed.keep.DecryptClassLoader" -jar message-feed-0.0.41.0.jar "-Denv=prod" "-DablyVerboseLog=true" "-Dserviceaccount=<SERVICE_ACCOUNT>" "-Dpwd=<YOUR_PASSWORD>" "-DtrackEmail=<TRACK_EMAIL>" "-DproxyEnabled=true" "-DproxyHost=<YOUR_PROXY_HOST>" "-DproxyPort=<YOUR_PROXY_PORT>"

If your proxy requires authentication:

    	
            java "-Djava.system.class.loader=com.refinitiv.collab.platform.msgfeed.keep.DecryptClassLoader" -jar message-feed-0.0.41.0.jar "-Denv=prod" "-DablyVerboseLog=true" "-Dserviceaccount=<SERVICE_ACCOUNT>" "-Dpwd=<SERVICE_ACCOUNT_PASSWORD>" "-DtrackEmail=<TRACK_EMAIL>" "-DproxyEnabled=true" "-DproxyHost=<YOUR_PROXY_HOST>" "-DproxyPort=<PROXY_PORT>" "-DproxyUsername=<PROXY_USERNAME>" "-DproxyPassword=<PROXY_PASSWORD>"
        
        
    

Please contact your IT/Network team to obtain the correct proxy host and port.

Certificate Installation

To prevent the User Message Feed from being blocked by endpoint security tools, clients must work with their IT teams to whitelist the Ably certificate on all machines running the app.

You can download the certificate from: https://ably.com/

This step is essential to enable a secure, encrypted connection between the app and the Messenger platform

 

Software

Application

Version

Requirements

Java Platform Standard Edition

Java SE version 17 or higher

This must be installed on computer that will be used to execute the User Message Feed application

User Message Feed

message-feed-0.0.41.1.zip

These can be downloaded from LSEG Developer Community https://developers.lseg.com/en/api-catalog/lseg-messenger/lseg-messenger/download

Example plugin file

message-feed-plugins-example.zip

 

LSEG Workspace accounts

A service account with the following license(s) is required. This account is used to subscribe to all chats in order to access delivered messages. You can create multiple message feed sessions concurrently under a single service account. Service accounts can be created in PAA.

License type (Machine)

License

Deployment method

Base

LSEG MESSENGER

Elektron Delivery

Add-on

UMF SERVICE ACCOUNT

Elektron Delivery

 

User ID(s) of whom you want to monitor messages sent through their LSEG Messenger. The user ID requires the following license(s).

License type (User)

License

Deployment method

Base

Workspace MESSENGER, LSEG Messenger

or

any Workspace product variant with embedded LSEG Messenger

Hosted-Internet/Customer-Managed

Add-on

UMF User Add-on

Hosted-Internet/Customer-Managed

 

Important notes:

·      The service account and the user account(s) must be located under the same location account (A-Number).

·      Service account creation, user account creation, and license assignment can be done through EAS or PAA, depending on how you currently manage users and licenses for your company.

·      User-Account must include both base product and add-on, installed with the same deployment method.

·      Once a service account is created, contact LSEG to register the service account.

 

For full details on how to setup and run User Message Feed, please see messenger-message-feed-technical-overview.pdf

SUBSCRIBE TO THIS API UPDATES

By submitting this form, you agree to your personal data being shared within the London Stock Exchange Group of companies (LSEG) for the purpose of receiving communications via post, phone and electronic means from LSEG about event, resources, products, and/or services.

For more information on how LSEG uses your data, see our Privacy Statement. You can adjust your preferences at any time through the preference link in any electronic communication that you receive from us.

Request Free Trial

Help & Support

Already a customer?

Office locations

Contact LSEG near you