У меня есть набранный Behavior
, который отправляет сообщения другому сообщению и использует context.messageAdapter
для маршрутизации ответов обратно самому себе. Для этого другого поведения отправляются разные сообщения, требующие адаптеров сообщений другой формы.
По какой-то причине ответы смешиваются в почтовом ящике, и ответ для одного адаптера обрабатывается адаптером для другого, вызывая исключение приведения .
Ожидается ли это, и мне пока только повезло, что сообщения не приходят не по порядку или как еще я могу предотвратить обработку сообщения неправильным адаптером?
Это с акка 2.5.31. Я не пробовал 2.6.x, потому что в нем слишком много критических изменений, чтобы я мог закончить кодовую базу.
Изменить: я подозреваю, что я становлюсь жертвой type_erasure здесь. Эти два адаптера предназначены для:
type Response[A] = Either[ElasticSearchError, A]
final case class GetDenormalizationState(
query: EsDenormalizationFetch,
replyTo: ActorRef[Response[Map[Long,DateTime]]]) extends StatelessCommand
final case class GetEntity(
entityType: String,
id: Long,
replyTo: ActorRef[Response[Option[EsEntity]]]) extends StatelessCommand
Т.е. он просто видит Left
и Right
и не может отличить разницу, кроме выбора первого найденного.