Lagom / Akka readside Процессор - PullRequest
       69

Lagom / Akka readside Процессор

0 голосов
/ 24 сентября 2018

Я реализовал процессор стороны чтения, чтобы помещать обработанные события и поддерживать таблицу cassandra стороны чтения.Однако обнаружил, что источник событий не удается через некоторое время с этой ошибкой.

[error] a.a.OneForOneStrategy - com.syn.common.akka.message.drive.CItem; local class incompatible: stream classdesc serialVersionUID = -2252861520543301684, local class serialVersionUID = -3725205170570257368
java.io.InvalidClassException: com.syn.common.akka.message.drive.CItem; local class incompatible: stream classdesc serialVersionUID = -2252861520543301684, local class serialVersionUID = -3725205170570257368
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:699) ~[na:1.8.0_181]
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1885) ~[na:1.8.0_181]
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751) ~[na:1.8.0_181]
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042) ~[na:1.8.0_181]
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573) ~[na:1.8.0_181]
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431) ~[na:1.8.0_181]
    at scala.collection.immutable.List$SerializationProxy.readObject(List.scala:479) ~[scala-library-2.11.8.jar:1.0.4]
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]

Класс CItem не изменился с самого начала ... Однако readsideProcessor не может десериализовать события. Немногие события обрабатываются и сохраняются в таблице.

case class CItem(q: JsValue, a: JsValue, d: Option[JsValue])

object CItem {
  implicit val format: Format[CItem] = Json.format[CItem]
}


object UDSerializerRegistry extends JsonSerializerRegistry {
  override def serializers: Seq[JsonSerializer[_]] = Seq(
    JsonSerializer[CRecord]
  )
}

И CRecord Содержит список элементов

1 Ответ

0 голосов
/ 24 сентября 2018

Ошибка, которую вы видите, возникает, когда есть двоичная несовместимость при (де) сериализации сообщений в akka-persistence.

Учитывая, что ваше сообщение использует play-json в своих полях (что я настоятельно не рекомендую), вполне вероятно, что версия play-json, используемая в вашем проекте, была изменена, и это нарушило двоичную совместимость вашего класса сообщений.

Чтобы избежать этого, я бы реорганизовал ваш код, чтобы он не использовал play-json в полях ваших сообщений.Он тесно связывает вас с библиотекой JSON, которая используется внутри Lagom, поэтому вы можете столкнуться с проблемами затенения при обновлении Lagom или, если говорить более прагматично, с этой проблемой двоичной совместимости.

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

...