Best way to listen to EventQueues in RFA?
The RFA documentation and examples states to use the EventQueue.dispatch within a loop to keep listening to events. If for example, you were just sending a login request (ie kill when successful) or an adhoc market data request (so just getting a snapshot price and then closing the stream), what is the best way to control the dispatch?
I wouldn't think you would want to listen forever like a subscription but you can't not put it in a loop
Best Answer
-
Refer to RFA Java Developer Guides, RFA supports the following threading models.
1. Callback Model
The Callback Model is used when no event queue is used. RFA will perform callbacks into the application-provided
processEvent() callback for each message received. The application/client code is run by the same thread of execution
as the Session Layer component. This model offers the lowest latency because no queues are used.2. Client Model
The Client Model is used when an event queue is utilised. The application/client code has its own thread of execution.
Messages are retrieved from the event queue by client calls to EventQueue::dispatch(). Typically, client code is
structured in a “dispatch loop,” which is centered around calls to dispatch() to check the event queue for any incoming
messages. This model uses multiple threads and is generally used for high throughput situations.3. Notification Client Model
The notification client model is a variant of the client model. The application has its own thread of execution. However, the
client is notified by a callback from the Session Layer when there is a message to be retrieved from the event queue. This
type of client is less RFA-centric than the Client Model described earlier. It is generally assumed the application is focused
on non-RFA activities and needs to be notified when a message is available to be read. This is considered the
lowest performing RFA configuration.For more information, please refer to section 14.4 Threading Models in RFA Java Developer Guide.
Their usages depend on the design of the application. If the application demands for high throughput, the client model must be used. Then, the application can assign a thread to regularly call EventQueue::dispatch() in order to retrieve the events.
0
Answers
-
Market data server might have multiple responses even for scenarios where application is expecting a single response.
Application can start an event dispatch in a separate thread with "Dispatchable.INFINITE_WAIT" parameter so that blocking thread does not consume any resources.
0 -
You also can create another thread to handle the EventQueue.dispatch() task only, if you think that dispatching events is not the application's main task.
0 -
Hi @Ethan Wong
Another point worth noting; for a Login, you need to continue dispatching messages as long as your app remains connected to the server. This is so that you can continue to receive messages e.g. if you are logged off the server or if the connection goes down etc.
0
Categories
- All Categories
- 6 AHS
- 37 Alpha
- 161 App Studio
- 4 Block Chain
- 4 Bot Platform
- 16 Connected Risk APIs
- 47 Data Fusion
- 30 Data Model Discovery
- 608 Datastream
- 1.3K DSS
- 577 Eikon COM
- 4.9K Eikon Data APIs
- 7 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- Trading API
- 2.7K Elektron
- 1.3K EMA
- 236 ETA
- 519 WebSocket API
- 33 FX Venues
- 10 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 20 Messenger Bot
- 2 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 59 Open Calais
- 264 Open PermID
- 39 Entity Search
- 2 Org ID
- PAM
- PAM - Logging
- 8.4K Private Comments
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 20 RDMS
- 1.4K Refinitiv Data Platform
- 367 Refinitiv Data Platform Libraries
- 3 Refinitiv Due Diligence
- LSEG Due Diligence Portal API
- 3 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.1K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 10 World-Check Customer Risk Screener
- 990 World-Check One
- 44 World-Check One Zero Footprint
- 45 Side by Side Integration API
- Test Space
- 3 Thomson One Smart
- 1.2K TR Internal
- Global Hackathon 2015
- 2 Specialists Who Code
- 10 TR Knowledge Graph
- 150 Transactions
- 142 REDI API
- 1.7K TREP APIs
- 4 CAT
- 21 DACS Station
- 117 Open DACS
- 1.1K RFA
- 103 UPA
- 172 TREP Infrastructure
- 224 TRKD
- 886 TRTH
- 5 Velocity Analytics
- 5 Wealth Management Web Services
- 59 Workspace SDK
- 9 Element Framework
- 5 Grid
- 13 World-Check Data File
- Yield Book Analytics
- 46 中文论坛