Аксон каркас - данные GZIP JSON - PullRequest
0 голосов
/ 14 января 2020

Какой самый простой способ реализовать декораторы сжатия GZIP на JacksonSerializer для Events и Messages в Axon? Я пытаюсь GZIP JSON сообщения перед сохранением событий в MySQL как BLOB.

Я пытался реализовать декоратор, как это:

public class GzipSerializer implements Serializer {

  private Serializer serializer;
  ...

, а затем настраивал его с помощью:

  @Autowired
  public void serializerConfiguration(Configurer configurer) {
    Serializer defaultSerializer = new GzipSerializer(JacksonSerializer.defaultSerializer());
    configurer.configureSerializer(configuration -> defaultSerializer)
        .configureMessageSerializer(configuration -> defaultSerializer)
        .configureEventSerializer(configuration -> defaultSerializer);
  }

но, похоже, не работает. Есть ли какой-нибудь более простой способ (или, возможно, уже реализованный функционал)?

1 Ответ

2 голосов
/ 14 января 2020

похоже, что вы используете Spring (Boot?) Для подключения вашего приложения. В этом случае способ определения / переопределения сериализаторов заключается в объявлении bean-компонентов:

@Primary  // <-- Use the Primary annotation for the generic serializer. This makes sure spring returns this instance when no specific qualifier is provided
@Bean
public Serializer serializer() {
  return new GzipSerializer(....);
}

Мы рекомендуем использовать сериализатор на основе Джексона только для сообщений, поскольку некоторые другие объектные структуры не соответствуют ожиданиям Джексона. Например, агрегаты (для снимков) и Sagas вряд ли соответствуют этим ожиданиям.

Сериализатор для сообщений можно определить следующим образом:

@Qualifier("messageSerializer") // <-- this qualifier tells Axon you intend to use this to serialize messages (incl. events)
@Bean
public Serializer serializer() {
  return new GzipSerializer(....);
}
...