Проблема с сериализацией событий в хранилище событий Axon Framework

spring-boot #jackson #axon #axon-framework

#весенняя загрузка #Джексон #axon #axon-framework

Вопрос:

5.5 и axon framework starter 4.5.4 Я могу без проблем читать и записывать свои события с помощью eventhandler и queryhandler, но когда я хочу использовать функцию eventstore.readevents, я получаю сериализацию.Я пытаюсь установить свойства моего приложения как для чтения, так и для записи, но не работает по-прежнему с той же ошибкой (кстати, я каждый раз очищаю базу данных и удаляю старые события).Я также пытаюсь установить тип xstream, но все та же проблема

 axon.serializer.general=jackson
axon.serializer.events=jackson
axon.serializer.messages=jackson


com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.axonframework.serialization.UnknownSerializedType and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]) 
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.12.5.jar:2.12.5]
    at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1276) ~[jackson-databind-2.12.5.jar:2.12.5]
    at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[jackson-databind-2.12.5.jar:2.12.5]
 

Ответ №1:

Прежде всего, я должен спросить, почему вы хотите использовать eventStore#readEvents , учитывая, что это не обычное использование. Этот метод используется внутри фреймворка и большую часть времени должен сохраняться таким образом.

Что касается вашей проблемы, вы можете легко проверить в коде фреймворка, что происходит и как он использует eventStore#readEvents метод. Прежде всего, подпись здесь: DomainEventStream readEvents(String aggregateIdentifier);

Он возвращает a DomainEventStream , который является Iterator реализацией a DomainEventMessage (как вы также можете видеть в code: public interface DomainEventStream extends Iterator<DomainEventMessage<?>> { ).

Проверяя любое из использований, например EventSorcingRepository , вы можете увидеть, как оно используется здесь и здесь, и в значительной степени использовать метод итератора для этого ( hasNext и peek , например). Использование этих методов даст вам доступ к DomainEventMessage тому, где вы можете получить Type , а также Payload (и другие полезные вещи, которые вам могут понадобиться).

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

Комментарии:

1. На самом деле я пытаюсь детально изучить возможности axon. по этой причине я пробую другой код. Если использование eventstore readevents не является хорошей практикой в то время, у меня нет какой-либо конкретной причины его использовать. Спасибо