Skip to main content

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 TypeCreate With
SBEMessages.sbe(...)
DTOMessages.dto(...)
FlexibleMessages.flexible(...)
CustomMessages.custom(...)
RawMessages.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.