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:
A 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 |
|
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
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
Related APIs
Request Free Trial
Call your local sales team
Americas
All countries (toll free): +1 800 427 7570
Brazil: +55 11 47009629
Argentina: +54 11 53546700
Chile: +56 2 24838932
Mexico: +52 55 80005740
Colombia: +57 1 4419404
Europe, Middle East, Africa
Europe: +442045302020
Africa: +27 11 775 3188
Middle East & North Africa: 800035704182
Asia Pacific (Sub-Regional)
Australia & Pacific Islands: +612 8066 2494
China mainland: +86 10 6627 1095
Hong Kong & Macau: +852 3077 5499
India, Bangladesh, Nepal, Maldives & Sri Lanka:
+91 22 6180 7525
Indonesia: +622150960350
Japan: +813 6743 6515
Korea: +822 3478 4303
Malaysia & Brunei: +603 7 724 0502
New Zealand: +64 9913 6203
Philippines: 180 089 094 050 (Globe) or
180 014 410 639 (PLDT)
Singapore and all non-listed ASEAN Countries:
+65 6415 5484
Taiwan: +886 2 7734 4677
Thailand & Laos: +662 844 9576