Overview
Whisperer uses two messages to report unexpected events to the Client:
ErrorReport- this is an informational user-defined message used to notify the Client of any erroneous scenarios that are encountered during operation. No client action is required.BusinessMessageReject- this is an actionable message used to notify the Client of message errors that have a business impact, the client is expected to take appropriate corrective action in consequence.
Since there are scenarios where these messages may not be delivered (e.g. during session abort sequences), both are persisted and will be delivered during session synchronisation as necessary.
BusinessMessageReject
BusinessMessageReject messages are sent in response to:
- Client Message Type Validation - The client sent a message type not supported by the Venue, for example they attempted to submit a QuoteRequest to an order-matching Venue.
- Client Message Field Validation - Whisperer performs validation of individual message fields in order to ensure that is is always able to construct a well-formed Venue message. Should the client omit the population of a required field, or populate it with an unsupported value, then Whisperer cannot translate the message correctly and it will not be sent to the Venue.
- Venue Message Validation - A session-layer Reject message or an application-layer BusinessMessageReject was sent by the Venue to Whisperer.
The message conforms to the standard FIX application-level message as follows:
RefSeqNum -The MsgSeqNum of the rejected Client message.RefMsgType -The FIX protocol semantic type of the rejected Client message.BusinessRejectRefID -The Client-provided value of the business-level ID field on the message being referenced.BusinessRejectReason -Code to identify reason for this RejectText -Message to explain reason for this Reject. In the case of errors reported by Whisperer, this will be a JSON-formatted string, otherwise the venue rejection Text is delivered.
BusinessMessageReject Handling
In Production, we do not expect to receive BusinessMessageReject messages from the venue in response to client messages, but we cannot guarantee that they will not ever occur.
Should such an event occur, the Client must ensure that it recovers from the error correctly.
This should include using the BusinessRejectRefID and RefMsgType to update pricing or order state, as necessary:
| Client Message | Client Role | RefMsgType | BusinessRejectRefID |
|---|---|---|---|
| MarketDataRequest | Taker | V | MDReqID |
| QuoteRequest | Taker | R | QuoteReqID |
| Quote | Maker | S | QuoteID |
| MassQuote | Maker | i | QuoteID |
| QuoteCancel | Maker | Z | QuoteID |
| QuoteResponse | Taker, Maker | AJ | QuoteReqID |
| NewOrderMultileg | Taker | AB | ClOrdID |
| MultilegOrderCancelReplaceRequest | Taker | AC | ClOrdID |
| OrderCancelRequest | Taker | F | ClOrdID |
| ExecutionReport | Maker | 8 | ExecID |
| ExecutionAck | Taker | BN | ClOrdID |
ErrorReport
The ErrorReport is used to provide the client with informational notifications of transient/recoverable errors that Whisperer encounters. No client action is required.
The error category is indicated via the message Subject field:
Subject = VenueLogonError -The current Venue connection or logon attempt failed. In the event that a venue session is not established at the first attempt, Whisperer will notify the Client of state/progress until such time as the connection is successfully established, or the Client sends aUserRequestto terminate the logon attempts.Subject = VenueSeqNumError -A Venue sequence number gap was detected (either inbound or outbound). This is used on UDP Market Data sessions, where message delivery is not guaranteed.Subject = MFAPIForcedDisconnect -Whisperer was forced to disconnect the Client session. This will only occur in erroneous circumstances, for example the Client is unable to keep up with message delivery rates.Subject = VenueMessageUnexpected- It is sometimes possible that a Venue may send unsupported messages to the Client once connected - for example, an ECN end-user may quite legitimately make a request for an unsupported product type. Whisperer ensures that the Client is always informed of these events by emitting an ErrorReport containing the full message details.Subject = MFAPITranslationFailure- Whisperer was unable to correctly translate between Client and Venue messages. This will only occur in erroneous circumstances, e.g. Hardware failure leading to a restart and loss of required caches.
Deprecated Usage
Deprecated Usage
In addition to it's use in informational contexts, the ErrorReport was originally used in place of the BusinessMessageReject. This behaviour is now deprecated, all clients are encouraged to migrate to the standard FIX message.
Client Message Validation
Subject = MFAPIMessageRejected -The client sent a message type not supported by the Venue, for example they attempted to submit a QuoteRequest to an order-matching Venue.
Client Message Field Validation
Subject = MFAPIValidationError -Whisperer performs validation of individual message fields in order to ensure that is is always able to construct a well-formed Venue message. Should the client omit the population of a required field, or populate it with an unsupported value, then Whisperer cannot translate the message correctly, and it will not be sent to the Venue.
Venue Message Validation
- Session and Business Message Rejects
Subject = SessionRejectSentByMF- A Session-level Reject message was sent to the Venue by Whisperer.Subject = SessionRejectReceivedByMF- A Session-level Reject message was sent by the Venue to Whisperer.Subject = BusinessMessageRejectSentByMF- A Business-level Reject message was sent to the Venue by Whisperer.Subject = BusinessMessageRejectReceivedByMF- A Business-level Reject message was sent by the Venue to Whisperer.