Publication
Data can be published on the platform by creating a message, setting its topic and payload, then calling session.publish(...).
Messages are mutable and reusable. Create them once where possible, then update the topic and payload before each publish.
Message Types
Use the Messages factory to create messages for publication.
| Message Type | Create With |
|---|---|
| SBE | Messages.sbe(...) |
| DTO | Messages.dto(...) |
| Flexible | Messages.flexible(...) |
| Custom | Messages.custom(...) |
| Raw | Messages.raw() |
SBE Publication
Publish an SBE message
SbeMessage<RfqEncoder, RfqDecoder> message = Messages.sbe(RfqEncoder.class);
ExpandableArrayBuffer buffer = new ExpandableArrayBuffer();
RfqEncoder encoder = new RfqEncoder();
encoder.wrapAndApplyHeader(buffer, 0, new MessageHeaderEncoder());
encoder.instrumentId("UST-10Y");
encoder.quantity(10_000_000);
message.topic(session.getApplicationName(), "rfq", "UST-10Y");
message.payloadEncoder(encoder);
Result result = session.publish(message);
DTO Publication
Publish a DTO message
DtoMessage<PriceDto> message = Messages.dto(PriceDto.class);
PriceDto price = new PriceDto();
price.instrumentId("UST-10Y");
price.bidPrice(99.125);
price.askPrice(99.375);
message.topic(session.getApplicationName(), "price", price.instrumentId());
message.payload(price);
Result result = session.publish(message);
Flexible Publication
Publish a flexible message
FlexibleMessage<Map<String, Object>> message = Messages.flexible(Map.class);
Map<String, Object> payload = new HashMap<>();
payload.put("instrument", "UST-10Y");
payload.put("price", 99.125);
message.topic(session.getApplicationName(), "price", "UST-10Y");
message.payload(payload);
Result result = session.publish(message);
Custom Publication
Publish a custom message
CustomMessage<OrderUpdate> message = Messages.custom(OrderUpdate.class);
OrderUpdate update = new OrderUpdate();
update.setOrderId("order-1");
update.setStatus("Accepted");
message.topic(session.getApplicationName(), "order", update.getOrderId());
message.payload(update);
Result result = session.publish(message);
Raw Publication
Publish a raw message
RawMessage message = Messages.raw();
int schemaId = 100;
int templateId = 1;
DirectBuffer buffer = new UnsafeBuffer("hello raw".getBytes(StandardCharsets.UTF_8));
message.topic(schemaId, templateId, session.getApplicationName(), "raw", "item-1");
message.payload(buffer, 0, buffer.capacity());
Result result = session.publish(message);
Publish Result
The publish methods return a Result.
Result result = session.publish(message);
if (result.isFailure()) {
log.warn("Unable to publish: {}", result);
}
Some failures are transient, for example back pressure. Other failures, such as topic errors or authorization failures, indicate a problem that should be surfaced rather than retried forever.