Могу ли я писать разные типы сообщений в хронику-очередь?

Я хотел бы писать разные типы сообщений в хронику-очередь и обрабатывать сообщения в потребителях в зависимости от их типов.

Как я могу это сделать?


person xiagao1982    schedule 25.03.2015    source источник


Ответы (3)


Chronicle-Queue предоставляет строительные блоки низкого уровня, которые вы можете использовать для написания любого типа сообщения, поэтому вам решать, какую структуру данных выбрать.

Например, вы можете добавить к данным, которые вы записываете в хронику, небольшой заголовок с некоторыми метаданными, а затем использовать его в качестве дискриминатора для обработки данных.

person Luca Burgazzoli    schedule 25.03.2015

Вы также можете писать/читать общий объект. Это будет немного медленнее, чем использование вашей собственной схемы, но это простой способ всегда читать тот тип, который вы написали.

person Peter Lawrey    schedule 16.08.2015

Для этого я использую 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
}
person Ben Wimpory    schedule 12.01.2017