轴突框架 - GZIP JSON 数据

Axon framework - GZIP JSON data

在 Axon 中为 EventsMessagesJacksonSerializer 上实现 GZIP 压缩装饰器的最简单方法是什么?在将事件作为 BLOB 保存到 MySQL 之前,我正在尝试 GZIP JSON 消息。

我试过像这样实现装饰器:

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);
  }

但是好像不行。是否有更简单的方法(或可能已经实现的功能)?

您似乎正在使用 Spring(启动?)连接您的应用程序。在这种情况下,define/override 序列化器的方法是声明 beans:

@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(....);
}

我们建议仅对消息使用基于 Jackson 的序列化程序,因为其他一些对象结构不符合 Jackson 的预期。例如,聚合(用于快照)和 Sagas 不太可能满足这些期望。

您可以按如下方式为消息定义序列化程序:

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

在 Spring 引导中,您可以像下面那样使用配置属性而无需 java 代码。

axon:
  serializer:
    messages: jackson
    general: jackson
    events: jackson