Я хотел бы писать разные типы сообщений в хронику-очередь и обрабатывать сообщения в потребителях в зависимости от их типов.
Как я могу это сделать?
Я хотел бы писать разные типы сообщений в хронику-очередь и обрабатывать сообщения в потребителях в зависимости от их типов.
Как я могу это сделать?
Chronicle-Queue предоставляет строительные блоки низкого уровня, которые вы можете использовать для написания любого типа сообщения, поэтому вам решать, какую структуру данных выбрать.
Например, вы можете добавить к данным, которые вы записываете в хронику, небольшой заголовок с некоторыми метаданными, а затем использовать его в качестве дискриминатора для обработки данных.
Вы также можете писать/читать общий объект. Это будет немного медленнее, чем использование вашей собственной схемы, но это простой способ всегда читать тот тип, который вы написали.
Для этого я использую Wire
try (DocumentContext dc = appender.writingDocument())
{
final Wire wire = dc.wire();
final ValueOut v = wire.getValueOut();
valueOut.typePrefix(m.getClass());
valueOut.marshallable(m);
}
При повторном прочтении я:
try (DocumentContext dc = tailer.readingDocument())
{
final Wire wire = dc.wire();
final ValueIn valueIn = wire.getValueIn();
final Class clazz = valueIn.typePrefix();
// msgPool is a prealloacted hashmap containing the messages I read
final ReadMarshallable readObject = msgPool.get(clazz);
valueIn.readMarshallable(readObject)
// readObject can now be used
}